このアンバインドが機能しないのはなぜですか?
-
03-07-2019 - |
質問
数分前にこの質問に答えて、この例を用意しました自分:
<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()
!