8

数分前にこの質問に答えようとして、この例を自分用に用意しました。

<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);">
4

6 に答える 6

13

jQuery のイベント モデルが原因で、最初のアンバインド シナリオは機能しません。jQuery はすべてのイベント ハンドラー関数を配列に格納し、 経由でアクセスできます$("#foo").data('events')unbind関数は、この配列内の特定の関数だけを探します。unbind()したがって、で追加されたイベントハンドラーのみを使用できますbind()

于 2009-04-29T20:37:44.523 に答える
3

対応する属性を削除することで、バインドを解除できます。

 $('#aspnetForm').removeAttr('onsubmit');
于 2010-12-25T00:02:20.540 に答える
1

バインド、バインド解除、およびフォーム送信アクションにバグがあります:

バインドしてからアンバインドし、フォームを送信する場合は、を使用できませんが$(form).submit()$(form INPUT[type=submit]).click()!

于 2011-11-17T16:30:39.247 に答える
1

以前に同様の問題に遭遇しました。私が結論付けたのは、バインドしたメソッドのみをアンバインドできるということです。Trialmethod() は jquery を介してバインドされていないため、メソッドで unbind を呼び出しても機能しませんでした。

万が一、判明した場合はお知らせください。

ありがとう。

于 2009-04-29T20:20:18.713 に答える
0

jQuery API ドキュメントで確認できる限り、unbind()廃止されました: https://api.jquery.com/unbind/

jQuery 3.0 の時点で、.unbind() は廃止されました。jQuery 1.7 以降は .off() メソッドに取って代わられたため、その使用はすでに推奨されていませんでした。

メソッドoff()を代わりに使用する必要があります。

于 2019-12-06T14:33:30.683 に答える