为什么这个解体不起作用?

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

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

为什么第一个解除绑定不起作用:

  

但是这个适用于trialMethod2方法:

  

由于jQuery的事件模型,第一个unbind场景不起作用。 jQuery将每个事件处理函数存储在一个数组中,您可以通过$(“#foo”)。data(’events’)访问它。 unbind函数仅查找此数组中的给定函数。 所以,你只能unbind()用bind()添加的事件处理程序

如果他们使用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双重绑定, #aspnetForm在按下第二个按钮时完全取消绑定它)。 问题是这种forms从来没有真正“束缚”开始。 您可以取消绑定标记中的onsubmit参数。

您可以取消绑定以下方式:p

$( ‘#aspnetForm’)removeAttr( ‘的onsubmit’)。

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

如果你有任何机会弄明白,请告诉我们。

谢谢。

绑定,解除绑定和表单提交操作有一个错误:

如果你绑定然后unbind,并且你想提交你的表单,你不能使用$(form).submit() ,但是$(form INPUT[type=submit]).click()