JQuery rebinding sur vs bind après une requête AJAX

Je voudrais savoir pourquoi le fichier .on de Jquery n’a jamais été appelé pour relier mon bouton d’envoi après un appel AJAX, .bind remplacer .bind je ne pouvais pas comprendre que c’était le problème. mais j’ai essayé diverses choses et la seule chose à faire était d’utiliser .bind au lieu de .on .

Mon formulaire est attaché à une liste déroulante qui générera de nouvelles données dans le formulaire au clic. Cela a été fait sur un appel AJAX Get et en cas de succès, je sélectionnais le formulaire et j’utilisais:

$('#formname').on('submit',function(){})

Et j’ai ensuite essayé

$('#formname').on('submit','form', function(){})

Certes, j’ai eu ce qui précède d’une question à laquelle on n’a jamais répondu. jqueryajax-form-using-onsubmit

J’ai également essayé de joindre l’élément on submit au corps car il ne change pas avec la fonction AJAX $('.container').on('submit','#formname', function(){}) suggéré ici: jquery lier des fonctions et des déclencheurs après un appel ajax

mais cela a également été ignoré. J’ai ensuite essayé de remplacer le type de bouton “Soumettre” par “Bouton”, puis d’affecter .on('click', etc... au cas où vous ne pourriez pas relier un bouton de soumission une fois que le formulaire a atteint le DOM.

mais la seule chose qui a fonctionné appelait .bind , je suis perdu car je veux utiliser les normes correctes. mon code complet ressemble de la sorte, notez partout où il y a un .bind il était auparavant un .on qui n’a pas été .bind .

  (function ($){ $('select#').on('click', function(){ var value = $(this).val(); var form = 'form#' $.ajax({ type: "GET", url: $(form).prop('action') , data: { gg:value }, dataType: "html", cache: false, success: function(htmlResponse){ var src = $(form , htmlResponse); $('.page_1col_col1').html( src ); //replace the submit with a input buton to tesk on click //$('# input[type="submit"]').prop('type','button'); $('#').bind('submit',function (){ rowBinding(); //replace the submit with a input btn $.ajax({ type:"POST", url: $(form).prop('action'), dataType: "html", cache: false }); }); } }); }); }(jQuery)); $(document).ready(function(){ $('#').bind('submit',rowBinding); }); function rowBinding(){ //stuff} 

Il semble que vous ayez très près de la bonne solution, mais que vous ayez été dérangé par un détail mineur.

Votre troisième exemple aurait dû fonctionner,

 $('container').on('submit','#formname', function(){}) 

mais le container aurait probablement dû être '.container' ou '#container' , ou même simplement un document tant que 'container' sélectionnerait un élément HTML de type conteneur.

Essayez ceci pour un conteneur nommé classe:

 $('.container').on('submit','#formname', function(){}) 

ou ceci pour un identifiant de conteneur:

 $('#container').on('submit','#formname', function(){}) 

Ou utilisez simplement l’object document (pas un sélecteur, donc pas de guillemets)

 $(document).on('submit','#formname', function(){}) 

Ou utilisez l’élément body:

 $('body').on('submit','#formname', function(){}) 

Fondamentalement, la syntaxe différée de on se lie à un élément qui restra en place pendant toute la vie de la page, écoutant l’événement choisi, puis sélectionnant l’élément cible via le sélecteur fourni dans le deuxième paramètre.

Mise à jour: En raison d’un bogue lié au style utilisé 'body' utilisation de 'body' dans les événements delegates est une mauvaise idée. Votre valeur par défaut devrait être document si rien d’autre n’est plus proche / pratique. Le problème provient d’un problème de style possible, où l’élément body reçoit une hauteur calculée de 0 et ne reçoit aucun événement de souris. 'body' fonctionnera probablement avec les événements submit dans cette instance, mais le document est un “défaut” plus sûr pour tous les cas 🙂