我几分钟前尝试回答this question并为自己准备了这个例子:
<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);">
答案 0 :(得分:11)
由于jQuery的事件模型,第一个unbind场景不起作用。 jQuery将每个事件处理函数存储在一个数组中,您可以通过$(“#foo”)。data('events')访问它。 unbind函数仅查找此数组中的给定函数。因此,您只能取消绑定()使用bind()
添加的事件处理程序答案 1 :(得分: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
个参数。
答案 2 :(得分:3)
您可以取消绑定以下方式:p
$( '#aspnetForm')removeAttr( '的onsubmit');
答案 3 :(得分:1)
之前我遇到过类似的问题。我得出的结论是,你只能取消绑定你绑定的方法。由于trialmethod()没有通过jquery绑定,因此调用unbind对该方法无效。
如果你有任何机会弄明白,请告诉我们。
感谢。
答案 4 :(得分:1)
绑定,取消绑定和表单提交操作存在错误:
如果您绑定然后取消绑定,并且您想要提交表单,则无法使用$(form).submit()
,但是$(form INPUT[type=submit]).click()
!
答案 5 :(得分:0)
据我在jQuery API文档中看到的,unbind()
已被弃用:
https://api.jquery.com/unbind/
自jQuery 3.0起,不推荐使用.unbind()。被它取代 自jQuery 1.7以来的.off()方法,因此它的使用已经 灰心丧气。
应该使用off()
方法。