1

jqueryで要素を表示しようとしています。要素が表示されたら、フォームを送信します。私は次のコードを持っています。

$("#form").submit(function(e) {
        var self = this;
        e.preventDefault(); 

        $('#element').show({
            complete: function() {
                self.submit();
            },
        });
});

私が抱えている問題は、上記のコードが要素を表示するときにアニメーションを追加することです。要素を簡単に表示するのではなく、すぐに表示したい(つまり、アニメーションを表示しない)。期間オプションをに設定しようとしましたduration:1が、これは望ましくない動作をしているようで、要素がまったく表示されません。easingオプションをに設定してみましnullたが、喜びもありません。

私は以下のコードも試しました(これにはアニメーションがないため):

$("#form").submit(function(e) {
        var self = this;
        e.preventDefault(); 

        $('#element').show();
        self.submit();
});

ただし、ここでの問題は、フォームが送信される前に要素が表示されないことです。

アニメーションなしで要素を表示し、要素が画面に表示されたら、フォームを要約する方法はありますか?

JQuery1.9.1の使用

アップデート:

数時間髪を引っ張った後、私が抱えていた問題はSafari6.0.3にあるようです。Safariは、スクリプトの次の行を実行する前に要素が表示されるのを待たないようです。他のすべてのブラウザはそうします。ほんの少しの時間遅延を設定するだけでも、この問題は解決するようです。

4

4 に答える 4

2

試す:

$("#form").submit(function(e) {
        var self = this;
        e.preventDefault(); 

        $('#element').show();

        // Delay the form submission

        setTimeout(function()
        {
             self.submit();
        }, 1000);
});

これはあなたの例と同じですが、最初のアクション(1000ミリ秒)の1秒後にフォーム送信(self.submit())の実行を遅らせるコードを追加しました。

于 2013-03-16T15:24:09.030 に答える
0

showのデフォルトの期間はです400

期間を1に設定してみたようですが、どうやって設定したのかわかりません。

これを試して :

$('#element').show( 0, function() {
                self.submit();
            }

私がこれらの行で行ったいくつかの例(フォームの送信はありませんが、単純なもの)

あなたはここでそれを見つけることができます

   $("#sample").hide();
    $("#new").hide();
    $('#clickme').click(function() {
      $('#sample').show(0, function() {
        // Animation complete.
          $("#new").show("slow") // Instead of this you submit your form
      });
});
于 2013-03-16T15:24:24.780 に答える
0

また:可能性があります:

$('#element').css({display: ''})
self.submit();

'show'はdisplayプロパティで機能するため。

あなたのフィードバックに続いて; 私の次の試みは...

$("form").on('submit', function(e) {
  e.preventDefault();
  $("#element").css({display:''});
  submitForm($(this));
});

function submitForm(form) {
  form.is(":visible")? form.submit()
  :  setTimeout(function() {
       submitForm(form);
     }, 50);
}

うまくいけば、それは機能しますが、モバイルでのIMのような保証はありません

于 2013-03-16T15:27:39.970 に答える
-1

$.Defferedを使用します

#elementアニメーションのタイプや期間に関係なく、フォームの送信が表示されるまで本当に「待機」する延期された例を次に示します。

フィドル

$("#form").submit(function(e) {
    var self = this;
    $('#element')
        .show(duration)         //Use a duration of 0 to remove animation
        .promise()              //Get deferred object
        .done(function(){       //Set the "success" callback for the deferred
            self.submit();      //Submit the form
        });
    return false; //Prevent immediate submission
});
于 2013-03-16T16:24:19.180 に答える