Il ya beaucoup de questions à propos de la liaison de futures manipulations inexistante éléments qui tous ont répondu avec live/délégué. Je me demande comment faire pour exécuter un arbitraire de rappel (pour ajouter une classe ou d'un déclencheur d'un plugin, par exemple) à tous les éléments qui correspondent à un sélecteur dans le futur tous les éléments qui correspondent à la même sélecteur qui sont encore à créer.
Il semble que la principale fonctionnalité de l'livequery plugin dans le noyau, mais l'autre partie, fixation arbitraire des rappels ai perdu le long de la voie en quelque sorte.
Une autre réponse est l'événement de la délégation mais que faire si on n'a pas accès à tout le code du fournisseur qui est de la création d'éléments pour l'avoir à déclencher les événements?
Voici quelques codes réels:
// with livequery
$('input[type=text], input[type=password], textarea, .basic_form .block select, .order_form .form_item select, .order_form .form_item input')
.livequery(function(){
$(this)
.focus(function(){
$(this).addClass('active');
})
.blur(function(){
$(this).removeClass('active');
})
.addClass('text');
});
// with live
$('input[type=text], input[type=password], textarea, .basic_form .block select, .order_form .form_item select, .order_form .form_item input')
.live('focus', function(){
$(this).addClass('active');
})
.live('blur', function(){
$(this).removeClass('active');
});
// now how to add the class to future elements?
// (or apply another plugin or whatever arbitrary non-event thing)
Une approche serait de surveiller lorsque de nouveaux nœuds sont ajoutés/supprimés et re-déclencher nos sélecteurs. Merci à @arnorhs nous savons à propos de la DOMNodeInserted événement, que je ne tiendrait pas compte de la croix-navigateur problèmes dans l'espoir que ces petits IE correctifs pourraient un jour la terre en amont de jQuery ou de connaître le jQuery fonctions DOM pourrait être enveloppé.
Même si nous pouvions nous assurer que le DOMNodeInserted tiré de la croix-navigateur, cependant, il serait ridicule de le lier avec plusieurs sélecteurs. Des centaines d'éléments peuvent être créés à tout moment, et de faire des dizaines de sélecteur d'appels sur chacun de ces éléments d'analyse.
Ma meilleure idée jusqu'à présent
Serait-il peut-être préférable de surveiller DOMNodeInserted/Supprimé et/ou d'un crochet en jQuery DOM routines de manipulation de définir un indicateur qui une "re-init" qui doit arriver? Ensuite, il pourrait juste être une minuterie qui vérifie que le drapeau de toutes les x secondes, seulement l'exécution de tous ces sélecteurs/rappels lorsque le DOM a réellement changé.
Qui pourrait encore être vraiment mauvais si vous avez été l'ajout/suppression d'éléments en grand nombre à un rythme rapide (comme l'animation ou de l' __). Avoir à ré-analyser le DOM une fois pour chaque enregistré le sélecteur de toutes les x secondes peut-être trop intense si x est faible, et l'interface semble lent si x est élevé.
Toutes les autres solutions nouvelles?
Je vais ajouter une prime quand il me le permet. J'ai ajouté une aubaine pour la plupart des solution originale!
Fondamentalement, ce que je reçois à est un plus approche orientée aspect de manipulation du DOM. Celui qui peut permettre que de nouveaux éléments vont être créées à l'avenir, et elles doivent être créées avec le document initial.prêt modifications appliquées à eux.
JS a été en mesure de faire beaucoup de magie dernièrement que je suis en espérant qu'il sera évident.