我几分钟前尝试回答这个问题并准备好此示例我自己:

<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()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top