JQuery:无法在post()方法中重新启用preventDefault()

时间:2012-10-25 08:40:08

标签: jquery preventdefault

我已阅读此thread以重新启用提交方法的preventDefault()。但这对我的情况不起作用。我尝试使用$(this).unbind('submit').submit()再次启用它。我把它放在POST方法中,然后打开JQuery Colorbox对话框。在该对话框中,还有一个提交按钮,但也无法单击该按钮。所以我必须重新启用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')$(this).get(0).allowDefault = true,但这些也无效。

2 个答案:

答案 0 :(得分:0)

我会把钱花在e代表按键事件的事实上,后来成为提交事件。

我真的只是在我的脑海中说这个并且夜晚很长,但是尝试将提交的参数e更改为其他东西(例如ev)并在ev上调用preventDedault,如下所示:

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

或者你可以使用return false;在提交功能结束时。 见:event.preventDefault() vs. return false

答案 1 :(得分:0)

那么,您想保护表格形式双重提交吗?您只需绑定一次提交事件。

$("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();
    }
});

<强>更新 那么,你必须存储表单提交状态。

$("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();