質問

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

<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のイベントモデルのため、最初のバインド解除シナリオは機能しません。 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');
    });
});

さて、これで邪魔になりません...すべてが動作するようになりました(2番目のボタンが押されたときに完全にバインドを解除する前に #aspnetForm をダブルバインドします)。問題は、フォームが実際には「バインド」されていないことです。マークアップで onsubmit パラメータのバインドを解除できます。

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

 $('#aspnetForm').removeAttr('onsubmit');

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

万が一解決したかどうかをお知らせください。

ありがとう。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top