Domanda

Provo a rispondere questa domanda alcuni minuti fa e ho preparato questo esempio per me stesso:

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

Perché il primo unbind non funziona:

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

Ma questo funziona per il metodo trialMethod2:

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

Soluzione

Il primo scenario non risolto non funziona, a causa del modello di eventi di jQuery. jQuery memorizza tutte le funzioni del gestore di eventi in un array a cui è possibile accedere tramite $ (" # foo "). data ('events') . La funzione unbind cerca solo la funzione data in questo array. Quindi, puoi solo unbind () gestori di eventi che sono stati aggiunti con bind()

Altri suggerimenti

Nessuno dovrebbe mai mescolare il proprio markup con il proprio codice di interazione se usano jQuery.

Aggiungi un po 'di javascript alla pagina in questo modo:

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

Ora, con quello fuori mano ... Tutto dovrebbe funzionare ora (anche se ora legherai il #aspnetForm prima di separarlo completamente quando viene premuto il secondo pulsante). Il problema era che la forma non era mai veramente "vincolata" all'inizio. Puoi separare i parametri onsubmit nel markup.

Puoi separare rimuovendo l'attributo corrispondente:

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

Ho riscontrato un problema simile in precedenza. Ciò che ho concluso è che puoi solo sciogliere un metodo che hai vincolato. Poiché trialmethod () NON è stato associato tramite jquery, la chiamata di unbind sul metodo non funzionerebbe.

Facci sapere se lo capisci per caso.

Grazie.

Esiste un bug relativo all'azione bind, unbind e form submit:

Se si esegue il bind e quindi si sblocca e si desidera inviare il modulo, non è possibile utilizzare $ (form) .submit () , MA $ (form INPUT [type = submit]) .click () !

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top