8

几分钟前我尝试回答这个问题,并为自己准备了这个例子:

<script>
  function trialMethod()
  {
    alert('On Submit Run!'); return true;
  }
  function trialMethod2()
  {
    alert('On Submit Run trialMethod2!'); return true;
  }
</script>

<form id="aspnetForm" onsubmit="trialMethod();">
    <input type="submit">
</form>

为什么第一次取消绑定不起作用:

<input type="button" id="btnTrial1" value="UNBIND 1" 
   onclick="$('#aspnetForm').unbind('submit', trialMethod);">

但是这个适用于 trialMethod2 方法:

<input type="button" id="btnTrial2" value="UNBIND 2" 
   onclick="$('#aspnetForm').bind('submit', trialMethod2).unbind('submit', trialMethod2);">
4

6 回答 6

13

由于 jQuery 的事件模型,第一个取消绑定方案不起作用。jQuery 将每个事件处理函数存储在一个数组中,您可以通过$("#foo").data('events'). 该unbind函数仅在此数组中查找给定函数。因此,您只能使用unbind()添加的事件处理程序bind()

于 2009-04-29T20:37:44.523 回答
5

如果他们使用 jQuery,任何人都不应该将他们的标记与他们的交互代码混为一谈。

像这样向页面添加一些javascript:

$(function() {
    $('#aspnetForm').bind('submit',function() {
        trialMethod();
    });
    $('#btnTrial2').bind('click',function() {
        $('#aspnetForm').unbind('submit');
    });
    $('#btnTrial2').bind('click',function() {
        $('#aspnetForm').bind('submit', trialMethod2).unbind('submit');
    });
});

现在,把它排除在外......现在一切都应该工作了(即使你现在将#aspnetForm在按下第二个按钮时完全解除绑定之前对它进行双重绑定)。问题是表格从一开始就没有真正“绑定”过。您可以取消绑定onsubmit标记中的参数。

于 2009-04-29T20:28:42.563 回答
3

您可以通过删除相应的属性来解除绑定:

 $('#aspnetForm').removeAttr('onsubmit');
于 2010-12-25T00:02:20.540 回答
1

我之前遇到过类似的问题。我得出的结论是,您只能取消绑定已绑定的方法。由于 trialmethod() 没有通过 jquery 绑定,因此在该方法上调用 unbind 将不起作用。

如果您有任何机会,请告诉我们。

谢谢。

于 2009-04-29T20:20:18.713 回答
1

绑定、取消绑定和表单提交操作存在错误:

如果绑定然后取消绑定,并且要提交表单,则不能使用$(form).submit(),但是$(form INPUT[type=submit]).click()

于 2011-11-17T16:30:39.247 回答
0

据我在 jQuery API 文档中看到的,unbind()已被弃用: https ://api.jquery.com/unbind/

从 jQuery 3.0 开始,.unbind() 已被弃用。自 jQuery 1.7 起,它被 .off() 方法所取代,因此已经不鼓励使用它。

off()应该改用方法。

于 2019-12-06T14:33:30.683 回答