为什么这种解体不起作用?
-
03-07-2019 - |
题
我几分钟前尝试回答这个问题并准备好此示例我自己:
<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);">
解决方案
由于jQuery的事件模型,第一个unbind场景不起作用。 jQuery将每个事件处理函数存储在一个数组中,您可以通过 $(&quot; #foo&quot;)。data('events')
访问它。 unbind
函数仅查找此数组中的给定函数。因此,您只能使用 bind()
unbind()
事件处理程序 其他提示
如果他们使用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
参数。
您可以通过删除相应的属性取消绑定:
$('#aspnetForm').removeAttr('onsubmit');
之前我遇到过类似的问题。我得出的结论是,你只能取消绑定你绑定的方法。由于trialmethod()没有通过jquery绑定,因此调用unbind对该方法无效。
如果你有任何机会弄明白,请告诉我们。
感谢。
绑定,取消绑定和表单提交操作存在错误:
如果你绑定然后取消绑定,并且你想提交你的表单,你不能使用 $(form).submit()
,但是 $(表单INPUT [type = submit]) .click()
!
不隶属于 StackOverflow