J'utilise jQuery pour attacher des plugins dans le gestionnaire $ (document) .ready() - par exemple, $ (". Date"). Datepicker (). Toutefois, lorsque je charge le contenu en utilisant $ ("... html ..."), par exemple à partir de $ .ajax (.., success (data) {}), ou d'ajaxForm ({target: ...}) , document.ready() n'est évidemment pas appelé. MISE À JOUR: comme l'a souligné est appelé mais je ne sais toujours pas quelle partie/élément a été chargé.
Je ne peux pas faire à nouveau ready() parce qu'il va rattacher les plugins une seconde fois aux éléments qui l'ont déjà. Donc, je dois le faire manuellement dans tous les cas, comme, je fais le succès (données) {item = $ (data); initDatePickerEtc (item); }
Y a-t-il un meilleur moyen?
Il ya Live Query plugin qui le fait pour les événements. Y at-il quelque chose qui me permettra de suivre la création d'éléments HTML et d'effectuer des actions alors? Quelque chose comme
$.oncreation(".date", function() { $(this).datepicker(); });
// or at least
$.oncreation(function() { $(this).find(".date").datepicker(); });
Grande si elle traitera aussi des éléments existants ... comme Live fonctionne pour les requêtes existantes au moment de clic() appel, et les éléments d'avenir créés.
Notez que je serai content de ne suivre que les éléments créés par jQuery. Donc, soit jQuery fournit un point d'extension à sa fonction html() ou non, je suppose. Maintenant, à partir des sources jQuery non:
html: function(value) {
return value === undefined ?
(this[0] ?
this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
null) :
this.empty().append(value);
},
Peut-être que si je remplace html() de sorte que même 3 ème plugins partie (par exemple ajaxForm) utiliseront ma version (qui se déclenche .Création $ callback) à la place de jQuery par défaut ... ça va marcher? Il y a des problèmes avec cette approche - ce n'est pas seulement html(), c'est append(), etc ... et ce serait génial d'obtenir l'événement seulement si le résultat de $ ("") est ajouté au document ... depuis quand c'est en mémoire je n'ai pas besoin de datepicker().
Je devrai obtenir une référence à la partie chargée à partir de là. Si je fais $ (document) .ready (function() {$ ("*"). Css ('background-color', 'red');}); dans la partie chargée, la page WHOLE deviendra rouge au lieu de simplement div. – queen3
oui. J'ai résolu cela en ajoutant une classe aux éléments et en filtrant quand je le répète: $ ('*'). not ('. doneAlready'). css (...). addClass ('doneAlready'); –
Bonne approche et fonctionne, +1. Je me demande si le suivi dans un tableau global est meilleur - je suis réellement préoccupé par les grandes pages et l'ajout de classe à chaque élément ... semble être un hack. Donc j'espère des approches plus propres. Mais si aucun, je pense que je vais devoir accepter cette solution. – queen3