Question

J'essaie de répondre à cette question il y a quelques minutes et de préparer cet exemple pour moi-mê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>

Pourquoi le premier déliement ne fonctionne pas:

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

Mais celui-ci fonctionne pour la méthode trialMethod2:

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

La solution

Le premier scénario non lié ne fonctionne pas, en raison du modèle d'événement de jQuery. jQuery stocke chaque fonction de gestionnaire d'événements dans un tableau auquel vous pouvez accéder via $ ("# foo"). data ('events') . La fonction unbind ne cherche que la fonction donnée dans ce tableau. Ainsi, vous ne pouvez utiliser que les gestionnaires d’événements unbind () ajoutés avec bind ()

Autres conseils

Personne ne devrait jamais mélanger son balisage avec son code d'interaction s'il utilise jQuery.

Ajoutez du javascript à la page comme ceci:

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

Maintenant que tout est réglé ... Tout devrait fonctionner maintenant (même si vous allez maintenant lier le #aspnetForm au double sens avant de le dissocier complètement lorsque vous appuierez sur le deuxième bouton). Le problème était que la forme n'était jamais vraiment «liée» pour commencer. Vous pouvez dissocier les paramètres onsubmit dans le balisage.

Vous pouvez dissocier en supprimant l'attribut correspondant:

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

J'ai déjà rencontré un problème similaire. Ce que j'ai conclu, c'est que vous ne pouvez dissocier qu'une méthode que vous avez liée. Étant donné que trialmethod () n'était PAS lié par jquery, l'appel de unbind sur la méthode ne fonctionnerait pas.

S'il vous plaît laissez-nous savoir si vous le découvrez par hasard.

Merci.

Il y a un bogue avec les actions bind, unbind et form submit:

Si vous vous associez puis dissociez et que vous souhaitez soumettre votre formulaire, vous ne pouvez pas utiliser $ (formulaire) .submit () , BUT $ (formulaire INPUT [type = submit]) .click () !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top