【问题标题】:jQuery live submit caugth in infinite loopjQuery live 在无限循环中提交问题
【发布时间】:2011-04-30 16:57:09
【问题描述】:

我正在尝试使用 jQuery 提交一个表单,它工作得很好,直到我不得不添加一个确认窗口,以便用户可以在提交之前查看他们的数据,这里是代码:

$("#create-group-form").live('submit', function(e){
    e.preventDefault();
    var form = $(this);
    jConfirm('Here I display the group info...', 'Confirm Group', function(r){
        if ( r ) {
            form.submit();
        }
    });
});

我正在为 jQuery 使用 jAlert 插件,但它与具有不同样式的常规确认提示一样工作,问题是当用户在提示上单击“确定”时,它会再次进入实时提交,陷入无限循环。

在我确认后有没有办法阻止它再次进入这个活动?我想我可以以某种方式解除绑定,但我还没有找到成功的方法。

顺便说一句,我正在使用实时提交,因为表单位于模式窗口中。

提前致谢!

【问题讨论】:

  • 一个模态窗口,那又怎样?一旦 DOM 准备好了,元素也准备好了,你可以绑定提交事件 - 即使表单没有显示......

标签: submit form-submit infinite-loop jquery


【解决方案1】:

调用表单元素的submit 方法,而不是jQuery 选择的方法。这意味着不会触发 jQuery 处理程序:

$("#create-group-form").live('submit', function(e){
    e.preventDefault();
    var form = this; // <-- this line changed
    jConfirm('Here I display the group info...', 'Confirm Group', function(r){
        if ( r ) {
            form.submit();
        }
    });
});

【讨论】:

  • 我试过了,但它把我重定向到表单的操作,但数据没有被提交:(
  • 没关系,这有效的问题是我在插入另一个提交句柄之前处理了一些数据,并且由于本机绕过这个数据没有被清理,因此没有被插入。非常感谢!
  • 重要的是你调用 DOM 元素的 submit 而不是 jQuery 对象的
【解决方案2】:

这将在您再次调用 submit() 之前取消绑定您的事件处理程序。

$("#create-group-form").live('submit', function(e){
    e.preventDefault();
    var form = $(this);
    jConfirm('Here I display the group info...', 'Confirm Group', function(r){
        if ( r ) {
            form.unbind('submit');
            form.submit();
        }
    });
});

【讨论】:

  • @javiervd 或者,包含一个在提交时修改的变量,用于确定是否再次显示确认。
【解决方案3】:

将表单上的提交按钮替换为button 标记,ID 类似于#psuedo-submit。当点击#psuedo-submit 时,弹出模态窗口并在确认时进行实际提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多