2009-04-29 29 views
6

cerco di rispondere this question pochi minuti fa e preparato questo esempio per me stesso:Perché questo unbind non funziona?

<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 si lavora per il metodo trialMethod2:

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

risposta

9

Il primo scenario non vincolante 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"). dati ('eventi'). La funzione unbind ha solo la funzione data in questo array. Quindi, si può associare solo i gestori di eventi() che sono stati aggiunti con bind()

1

Mi sono imbattuto in un problema simile prima. Ciò che ho concluso è stato che puoi solo sciogliere un metodo che hai vincolato. Dato che trialmethod() NON è stato associato a jquery, chiamare unbind sul metodo non funzionerebbe.

Per favore fateci sapere se lo capite per caso.

Grazie.

3

Nessuno deve mai combinare il proprio markup con il proprio codice di interazione se utilizza jQuery.

Aggiungete un po 'javascript per la pagina come questa:

$(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 di mezzo ... tutto dovrebbe funzionare ora (anche se ora sarà doppio vincolante il #aspnetForm prima non vincolante completamente quando viene premuto il secondo pulsante). Il problema era che la forma non era mai veramente "vincolata" all'inizio. È possibile separare i parametri onsubmit nel markup.

+0

Nessuno deve mai mescolare il proprio codice di revisione con il proprio codice di interazione, punto e basta. – eyelidlessness

+0

In effetti, non dovrebbero mai essere combinati. Periodo. * Soprattutto * se si utilizza jQuery: D. – KyleFarris

3

È possibile slegare modo seguente:. P

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

1

c'è un bug con bind, non associare e formano azione di invio:

Se si associa poi separare, e si desidera inviare il modulo, non è possibile utilizzare $(form).submit(), MA $(form INPUT[type=submit]).click()!

Problemi correlati