Pergunta

Eu tento responder esta questão há poucos minutos e preparou este exemplo para me:

<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 que o primeiro unbind não funciona:

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

Mas este funciona para o método trialMethod2:

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

Solução

O primeiro cenário unbind não funcionar, por causa do modelo de eventos do jQuery. jQuery armazena todas as funções manipulador de eventos em uma matriz que você pode acessar via $("#foo").data('events'). A função unbind olha apenas para a função dada nesta matriz. Assim, você pode apenas manipuladores de eventos unbind() que foram adicionados com bind()

Outras dicas

Ninguém deve misturar a sua marcação com o seu código interação se eles estão usando jQuery.

Adicione um pouco de javascript para a 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');
    });
});

Agora, com que fora do caminho ... Tudo deve funcionar agora (mesmo que você agora será o #aspnetForm antes desvinculação-lo completamente quando o segundo botão é pressionado ligação duplo). O problema era que o formulário nunca foi realmente 'obrigado' para começar. Você pode parâmetros onsubmit UNBIND na marcação.

Você pode desvincular removendo o atributo correspondente:

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

Eu corri para um problema semelhante antes. O que eu concluiu foi que você pode único método um unbind você binded. Desde trialmethod () não foi binded através jquery, chamando unbind no método de trabalho não tomaria.

Por favor, deixe-nos saber se você descobrir isso por acaso.

Graças.

Há um bug com bind, ação unbind e envio de formulário:

Se você ligamento então unbind, e você quer enviar seu formulário, você não pode usar $(form).submit(), MAS $(form INPUT[type=submit]).click()!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top