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

Can*_*var 8 javascript jquery jquery-events

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

但是这个适用于trialMethod2方法:

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

Raf*_*ael 12

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


Kyl*_*ris 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');
    });
});
Run Code Online (Sandbox Code Playgroud)

现在,有了这个...现在一切都应该工作(即使你现在将双重绑定,#aspnetForm然后在按下第二个按钮时完全取消绑定).问题是这种形式从来没有真正"束缚"开始.您可以取消绑定onsubmit标记中的参数.