J'ai un problème avec .on()
. J'ai plusieurs éléments de formulaire (formulaires avec class="remember"
), j'en ajoute également un autre en form.remember
utilisant AJAX. Donc, je veux qu'il gère l'événement de soumission quelque chose comme:
$('form.remember').on('submit',function(){...})
mais le formulaire ajouté avec AJAX ne fonctionne pas avec.
Où est le problème? Est-ce un bug?
$(document).on('submit','form.remember',function(){...})
document
par le parent statique le plus proche.Réponses:
Vous devez déléguer l'événement au niveau du document
$('form.remember').on('submit'
fonctionne de la même manière que$('form.remember').submit(
mais lorsque vous utilisez,$(document).on('submit','form.remember'
cela fonctionnera également pour le DOM ajouté plus tard.la source
$(document).on
les performances sont bien inférieures à$('form.remember').on('submit'
. Il doit maintenant écouter tous les événements de soumission dans le document. Il est préférable de restreindre un peu la portée plutôt que d'écouteron
document
, si possibleJ'ai eu un problème avec les mêmes symptômes. Dans mon cas, il s'est avéré que ma fonction d'envoi manquait l'instruction "return".
Par exemple:
la source
return false;
ne soumettra pas le formulaire. Pour soumettre le formulaire, utilisezreturn true;
.Le problème ici est que le "on" est appliqué à tous les éléments qui existent AU MOMENT. Lorsque vous créez un élément dynamiquement, vous devez réexécuter le:
Étant donné que les formulaires ont généralement des noms ou des identifiants, vous pouvez également les joindre au nouveau formulaire. Si je crée beaucoup de choses dynamiques, j'inclus une fonction de configuration ou de liaison:
Ainsi, chaque fois que vous créez quelque chose (des boutons généralement dans mon cas), j'appelle simplement bindItems pour tout mettre à jour sur la page.
Je n'aime pas utiliser des éléments de «corps» ou de document car avec les onglets et les modaux, ils ont tendance à traîner et à faire des choses auxquelles vous ne vous attendez pas. J'essaie toujours d'être aussi précis que possible à moins que ce ne soit un simple projet d'une page.
la source