2009-04-29 10 views
6

私は数分前this questionにお答えしようと自分のために、この例を準備:なぜこのバインドが機能しないのですか?

<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);"> 
をしかし、この1つはtrialMethod2方法のために働きます。

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

答えて

9

jQueryのイベントモデルのため、最初のアンバインドのシナリオが機能しません。 jQueryはすべてのイベントハンドラ関数を$( "#foo")。data( 'events')を介してアクセスできる配列に格納します。 unbind関数は、この配列内の与えられた関数を探します。だから、あなたはあなたが以下の方法をバインド解除することができます

1

私は前に同様の問題に遭遇しました。私が締結したのは、バインドしたメソッドのバインドを解除できるだけだったということでした。 trialmethod()はjqueryでバインドされていなかったので、メソッドのバインドを呼び出すことはできませんでした。

万が一間違いがありましたら、お知らせください。

ありがとうございました。

3

jQueryを使用している場合は、対話コードとマークアップを混同しないでください。あなたは今、バインド解除の前に#aspnetFormをダブルバインドされていても(邪魔にならないようにそれに...すべてが動作するようになりました、今

$(function() { 
    $('#aspnetForm').bind('submit',function() { 
     trialMethod(); 
    }); 
    $('#btnTrial2').bind('click',function() { 
     $('#aspnetForm').unbind('submit'); 
    }); 
    $('#btnTrial2').bind('click',function() { 
     $('#aspnetForm').bind('submit', trialMethod2).unbind('submit'); 
    }); 
}); 

は、このようなページにいくつかのJavaScriptを追加します。 2番目のボタンが押されると完全に終了します)。問題は、フォームが実際に始まったことは決してありませんでした。マークアップでは、onsubmitパラメータのバインドを解除できます。

+0

マークアップとインタラクションコードを完全に混同しないでください。 – eyelidlessness

+0

実際、決してそれらを組み合わせるべきではありません。期間。 *特にjQueryを使用している場合:D。 – KyleFarris

3

バインド()で追加された()イベントハンドラバインド解除することができます。pは

$( '#aspnetForm')removeAttr( 'のonSubmit');あなたがバインド解除、その後結合し、そしてあなたがフォームを送信する場合は、$(form).submit()、しかし$(form INPUT[type=submit]).click()を使用することはできません

1

バインドでバグがあり、アンバインドし、アクションを提出形成します!

関連する問題