【问题标题】:Trying to submit a form with live(), delegate and bind()尝试使用 live()、delegate 和 bind() 提交表单
【发布时间】:2012-02-02 15:37:17
【问题描述】:

如果表单无效,我想在浏览器控制台中打印一条消息。

使用 bind 的后续代码有效:

jQuery(document).ready(function () {
    $('form').bind('submit', function () {
        if ($j(this).valid() == false) {
            console.log("Warning: form not valid");
        };
    });
});

当我将 bind 替换为 submit 时也能正常工作:

$('form').submit(function () {

但是当我使用 delegate 时不起作用:

$('body').delegate('form', 'submit', function () {

即使 live 也没有成功:

$('form').live('submit', function () {

表单不是动态插入的。那 live 和 delegate 不起作用的原因是什么??

编辑

我刚刚发现 jquery.validate.min.js 导致了问题。嗯,但是我怎样才能防止我自己的表单事件被阻止呢?

【问题讨论】:

  • 您使用的是什么版本的 jQuery?为什么要在身体上而不是形式上进行 .live?
  • 如果表单不是动态插入的,为什么不直接在表单元素上绑定事件呢?
  • 抱歉,复制粘贴错误,我更新了live-Part。我正在使用 jquery 1.6.4
  • 因为我稍后插入表单时也会出现该消息。
  • 删除你用.submit附加的事件,只保留delegate,看看它是否有效。

标签: jquery forms submit bind live


【解决方案1】:

您将在 form 元素或 formbody 之间的祖先上拥有另一个处理程序,它通过以下方式阻止事件的传播;

  1. 在事件对象上调用stopPropagation()
  2. 在事件对象上调用stopImmediatePropagation()
  3. return false'来自事件处理程序。

您需要找到该处理程序,并阻止它这样做。请记住,这也可能是您启用的插件的工作。

【讨论】:

  • 我刚刚发现 jquery.validate.min.js 导致了这个问题。嗯,但是如何防止我自己的表单事件被阻止?
  • @西蒙。使用unbind 删除他们的偶数。
  • @Simon:您的事件和 jquery.validate 绑定的事件的处理方式相同。绕过 jquery.validate 绑定的唯一方法是像 gdoron 所说的那样取消绑定这些事件。
【解决方案2】:

我猜你 return false 来自回调,因此阻止了此回调触发。

看到这个JSFiddle DEMO

【讨论】:

  • 不是这样的,之前没有其他事件绑定。
  • @西蒙。您是否删除了使用on.submit 附加的事件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多