Frage

Ich versuche diese Frage vor ein paar Minuten und bereit, dieses Beispiel für ich:

<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);">
War es hilfreich?

Lösung

Das erste unbind Szenario funktioniert nicht, weil das Event-Modells von jQuery. jQuery speichert jede Event-Handler-Funktion in einem Array, das Sie über $("#foo").data('events') zugreifen können. Die unbind Funktion sieht nur für bestimmte Funktion in diesem Array. So können Sie nur unbind() Event-Handler, die mit bind() hinzugefügt wurden

Andere Tipps

Niemand sollte jemals ihre Markup mit ihrer Interaktion Code mischen, wenn sie jQuery verwenden.

Fügen Sie einige Javascript auf der Seite wie folgt aus:

$(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 dem aus dem Weg ... Alles soll jetzt arbeiten (obwohl Sie jetzt doppelt Bindung den #aspnetForm sein werden, bevor es vollständig freibleibend, wenn die zweite Taste gedrückt wird). Das Problem war, dass die Form war nie wirklich ‚gebunden‘ zu beginnen. Sie können onsubmit Parameter im Markup entbinden.

Sie können unbind durch das entsprechende Attribut zu entfernen:

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

Ich lief in ein ähnliches Problem vor. Was ich geschlossen war, dass man nur eine Methode, die Sie binded haben entbinden können. Da trialmethod () wurde nicht durch jquery binded, ruft unbind auf die Methode arbeiten würde nicht.

Bitte lassen Sie uns wissen, wenn Sie es herausfinden durch Zufall.

Danke.

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top