Puis-je appeler $ (document) .ready () pour ré-activer tout sur les gestionnaires d'événements de charge?

Est-ce que quelqu'un sait SI et COMMENT je pourrais appeler à nouveau tous les gestionnaires d'événements en charge? Je fais référence à certains fichiers .js dont je n'ai PAS de contrôle, et ces librairies .js font leur initialisation en $ (document) .ready () et, malheureusement, ne fournissent aucune fonction facile à réinitialiser.

Je tente actuellement de remplacer un grand bloc div par un contenu d'un appel ajax et je dois alors réinitialiser les bibliothèques externes. Donc, il serait bon d'appeler $ (document) .ready () afin de réinitialiser TOUT.

Jusqu'à présent, j'ai essayé cela sur l'appel d'ajax:

success: function(data) { alert('1'); // Displays '1' $('#content').html(data); alert('2'); // Displays '2' $(document).ready(); alert('3'); // Does not display } 

Appel de $(document).ready(); Échoue aussi. La console JavaScript ne montre aucune erreur. Est-ce que quelqu'un sait si cela est possible (sans modifier les fichiers de bibliothèque javascript)?

Comme vous avez demandé comment le faire sans modifier les fichiers JS externes, je répondrai de cette façon. J'ai parcouru la fonction .ready() dans jQuery dans le débogueur et il apparaît que la fonction racine appelée lorsque la page est prête est la suivante:

 jQuery.ready(); 

Mais, il semble que vous ne puissiez pas l'appeler à nouveau pour accomplir ce que vous voulez, car il apparaît que lorsqu'il déclenche la première fois, il se détache des fonctions précédemment enregistrées (par exemple en les oubliant). En tant que tel, appeler jQuery.ready() manuellement, une deuxième fois ne redémarre pas les mêmes appels de fonction et j'ai vérifié que dans le débogueur (le point d'arrêt n'a été atteint qu'une seule fois et pas une seconde fois).

Il semble donc que vous ne puissiez pas résoudre ce problème sans modifier l'implémentation jQuery afin de ne pas déconnecter (pour autoriser plusieurs licenciements) ou de changer chaque code du gestionnaire prêt pour utiliser vos propres événements que vous pouvez déclencher autant de fois que vous vouloir.

J'ai fait quelque chose comme:

 // When document is ready... $(function(){ onPageLoad(); }); function onPageLoad(){ // All commands here } 

Maintenant, je peux appeler cette fonction chaque fois que j'ai besoin.

Un moyen simple d'y parvenir est juste d'inventer votre propre événement comme ceci:

 $(document).bind('_page_ready', function() { /* do your stuff here */}); 

Ensuite, ajoutez ceci:

 $(function() { $(document).fire('_page_ready'); }); // shorthand for document.ready 

Enfin, chaque fois que vous devez l'exécuter, vous l'appelez simplement:

 $(document).fire('_page_ready'); 

[Modifier]

Si vous ne pouvez vraiment pas éditer les fichiers de script externes, j'ai fait un jsFiddle qui rend ce que vous voulez faire possible, vous pouvez consulter le code ici: http://jsfiddle.net/5dRxh/

Cependant, si vous ne voulez pas utiliser cela, il est important que vous ajoutez ce script DROIT APRÈS que vous incluez jQuery, comme ceci:

 <script src="jquery.js" type="text/javascript"></script> <script> //script from jsFiddle (only the plugin part at the top). </script> <!-- All the other script-files you want to include. --> 

Je ne pense pas que cela puisse être fait car jquery dégage l'événement prêt après son exécution. De la source:

 // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger( "ready" ).unbind( "ready" ); } 

Vous pouvez le faire de manière simple.

Effectuez une fonction:

 function REinit() { /// PLACE HERE ALL YOUR DOC.READY SCRIPTS } 

Placez simplement la fonction Reinit () à l'intérieur de doc.ready:

 $(document).ready(function(){ REinit(); }); 

Puis après une action ajax, appelez juste

 REinit(); 

Je pense qu'il est simple de changer l'événement prêt pour réussir Pjax

Changez-le de:

 $(document).ready(function() { // page load stuff }); 

À:

 $(document).on('ready pjax:success', function() { // will fire on initial page load, and subsequent PJAX page loads }); 

Ce sera ce que vous voulez, maintenez l'événement prêt jusqu'à ce que vous soyez vraiment prêt.

https://api.jquery.com/jquery.holdready/