0

このスレッドを読んで、submitメソッドでpreventDefault()を再度有効にしました。しかし、それは私の場合にはうまくいきませんでした。$(this).unbind('submit').submit()もう一度有効にしてみ ました。POSTメソッド内に配置し、JQueryカラーボックスダイアログが開く前に配置しました。そのダイアログ内には送信ボタンもありますが、ボタンをクリックすることもできません。そのため、ボタンをクリックできるように、preventDefault()を再度有効にする必要があります。

$("#Username, #Password").keypress(function(e){
    if (e.which == 13 ) {
        $("form:first").submit(function(e){ 
            e.preventDefault(); //interrupt submit process
            var userdata = {username : $("#Username").val() };
                $.ajax({
                  type: 'POST',
                  url: 'http://localhost/test/test.php',
                  data: userdata,
                  success: function(data){  
                          if(data==0){                                      
                                $(this).unbind('submit').submit(); //enable it again(but it didn't worked!)
                                $.fn.colorbox({width:"50%", inline:true, href:"#reminder_dialog" })} //JQuery Colorbox opened.
                            else { 
                                $(this).submit();                               
                            }
                        },              
                  async:false
            });
        });
    }               
 });    

$(this).trigger('submit')私もすでにandを使おうとしまし$(this).get(0).allowDefault = trueたが、それらも機能しませんでした。

4

2 に答える 2

0

それで、フォームフォームの二重送信を保護しますか? submit イベントをバインドする必要があるのは 1 回だけです。

$("form:first").submit(function(e) {
    e.preventDefault(); //interrupt submit process

    var $this = $(this); // Form jQuery object

    if ($this.data('busy')) return; // Protect this form from double submitting

    $this.data('busy', true); // Set the form as busy (we are sending something now)

    var userdata = {
          username: $("#Username").val()
        };

$.ajax({
    type: 'POST',
    url: 'http://localhost/test/test.php',
    data: userdata,
    success: function(data) {

        $this.data('busy', false); // Form is not busy anymore

        if (data == 0) {
            // Do your stuff. I don't understand what do you need here.
        } else {
                      // Do your stuff. I don't understand what do you need here.
        }
    },
    async:false
});
});

また、<input>フィールドを使用している場合は、それに関するコードを記述する必要はありません。ENTER キーを押すとフォームが送信されます。しかし、念のために:

$("#Username, #Password").keypress(function(e) {
    if (e.which == 13) {
        $("form:first").submit();
    }
});

UPDATE さて、フォーム送信状態を保存する必要があります。

$("form:first").submit(function(e) {
    e.preventDefault(); //interrupt submit process

    var $this = $(this); // Form jQuery object

    var state = $this.data('state');

    if (state == 'busy') {
        return;
    } else if (state != 'colorbox') {
        // Set the state that we are showing colorbox
        $this.data('state', 'colorbox');

        // Show your colorbox or whatever
        // ...

        return;
    }

    $this.data('state', 'busy');

    // Submit with that AJAX code
    // ...
});

次のように、どこからでも送信状態を設定できます。

$("form:first").data('state', 'chilling');

次のように、どこからでもフォームを送信できます。

$("form:first").submit();
于 2012-10-25T09:05:56.533 に答える
0

e が keypress イベントを表し、後で送信イベントになるという事実にお金をかけます。

私は本当にこれを頭の上で言っているだけで、夜は長かったですが、送信のパラメーター e を別のもの (ev など) に変更し、次のように ev で preventDedault を呼び出してみてください。

....
$("form:first").submit(function(ev){ 
ev.preventDefault(); //interrupt submit process
....

あるいは、おそらく return false; を使用できます。submit 関数の最後に。参照: event.preventDefault() と return false

于 2012-10-25T09:02:26.750 に答える