2009-04-29 25 views
6

trato de responder this question hace unos minutos y se prepararon este ejemplo para mí mismo:¿Por qué este desvinculación no funciona?

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

¿Por qué la primera unbind no funciona:

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

Pero esto se trabaja para el método trialMethod2:

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

Respuesta

9

El primer escenario de desenlace no funciona, a causa de modelo de eventos de jQuery. jQuery almacena cada función del controlador de eventos en una matriz a la que puede acceder a través de $ ("# foo"). data ('events'). La función de desvinculación solo busca la función dada en esta matriz. Por lo tanto, sólo se puede desvincular controladores de eventos() que se agregaron con bind()

1

Me encontré con un problema similar antes. Lo que concluí fue que solo puedes desvincular un método que hayas enlazado. Debido a que trialmethod() NO estaba enlazado a través de jquery, llamar a unbind en el método no funcionaría.

Por favor, háganos saber si te diste cuenta por casualidad.

Gracias.

3

Nadie debería mezclar su marcado con su código de interacción si están utilizando jQuery.

añadir código JavaScript a la página de la siguiente manera:

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

Ahora, con eso fuera del camino ... todo debería funcionar ahora (a pesar de que ahora va a ser de doble unión de la #aspnetForm antes compromiso.Por completamente cuando se presiona el segundo botón). El problema era que la forma nunca estuvo realmente 'limitada' para empezar. Puede desvincular los parámetros onsubmit en el marcado.

+0

Nadie debería mezclar su marcado con su código de interacción, punto. – eyelidlessness

+0

De hecho, nunca deben combinarse. Período. * Especialmente * si está usando jQuery: D. – KyleFarris

3

Puede desvincular siguiente manera:. P

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

1

hay un error con bind, desenlaza y forman presentar la acción:

Si enlaza luego desatar, y que desea enviar el formulario, no se puede utilizar $(form).submit(), PERO $(form INPUT[type=submit]).click()!

Cuestiones relacionadas