2009-04-29 18 views
6

Ich versuche this question vor ein paar Minuten zu beantworten und bereit, dieses Beispiel für mich:Warum funktioniert diese Entkopplung nicht?

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

Warum der erste unbind nicht funktioniert:

<input type="button" id="btnTrial1" value="UNBIND 1" 
    onclick="$('#aspnetForm').unbind('submit', trialMethod);"> 

Aber dieses arbeitet für die trialMethod2 Methode:

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

Antwort

9

Das erste Entbindungsszenario funktioniert aufgrund des jQuery-Ereignismodells nicht. jQuery speichert jede Ereignishandlerfunktion in einem Array, auf das Sie über $ ("# foo"). data ('events') zugreifen können. Die Unbind-Funktion sucht nur nach der gegebenen Funktion in diesem Array. So können Sie nur unbind() Event-Handler, die mit bind hinzugefügt wurden()

1

Ich stieß auf ein ähnliches Problem zuvor. Ich kam zu dem Schluss, dass Sie nur eine Methode lösen können, die Sie gebunden haben. Da triathethod() NICHT durch jquery gebunden war, würde das Aufrufen von unbind auf der Methode nicht funktionieren.

Bitte lassen Sie uns wissen, wenn Sie es zufällig herausfinden.

Danke.

3

Niemand sollte jemals seine Markup mit ihrem Interaktionscode mischen, wenn sie jQuery verwenden.

einige Javascript auf der Seite wie folgt hinzufügen:

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

nun mit, dass aus dem Weg ... Alles sollte jetzt arbeiten (obwohl Sie jetzt doppelt Bindung des #aspnetForm vor unbinding sein es vollständig, wenn die zweite Taste gedrückt wird). Das Problem war, dass die Form nie wirklich "gebunden" war. Sie können onsubmit Parameter im Markup lösen.

+0

Niemand sollte jemals ihre Markup mit ihrem Interaktionscode mischen, Punkt. – eyelidlessness

+0

In der Tat sollten sie nie kombiniert werden. Zeitraum. * Besonders * wenn Sie jQuery verwenden: D. – KyleFarris

3

Sie folgende Art und Weise lösen können. P

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

1

Es ist ein Fehler mit binden, lösen und bilden Aktion einreichen:

Wenn Sie dann unbind binden, und Sie möchten Ihre Formular abzuschicken, nicht $(form).submit(), ABER $(form INPUT[type=submit]).click() verwenden können!

Verwandte Themen