Pregunta

Intento responder esta pregunta hace unos minutos y preparé este ejemplo para yo mismo:

<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é no funciona la primera desvinculación:

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

Pero este funciona para el método trialMethod2:

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

Solución

El primer escenario de desvinculación no funciona debido al 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 ('eventos') . La función unbind busca solo la función dada en esta matriz. Por lo tanto, solo puede unbind () controladores de eventos que se agregaron con bind()

Otros consejos

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

Agregue algunos javascript a la página como esta:

$(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 vinculará dos veces el #aspnetForm antes de desenlazarlo completamente cuando presione el segundo botón). El problema era que la forma nunca estaba realmente "ligada" para empezar. Puede desvincular los parámetros onsubmit en el marcado.

Puede desvincularse eliminando el atributo correspondiente:

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

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

Háganos saber si lo descubre por casualidad.

Gracias.

Hay un error con la acción de vincular, desvincular y enviar formulario:

Si enlaza, luego desenlaza y desea enviar su formulario, no puede usar $ (form) .submit () , PERO $ (form INPUT [type = submit]) .click () !

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top