2010-08-26 13 views
0

J'ai un certain nombre de scripts jQuery qui sélectionnent des éléments dans la zone sur laquelle je lance une actualisation partielle de la page.Les scripts jQuery ne s'exécutent plus sur les éléments partiellement actualisés

J'utilise ce tricks css extrait de code pour rafraîchir cette partie de la page:

$('#refreshbutton').click(function() { 

var url = "http://myUrl.com/indexTest.php?ID=" + Math.random(); 

setTimeout(function() { 
     $("#maindisplay").load(url+" #maindisplay>*",""); 
}, 100); 
}); 

Le problème est que les éléments dans #maindisplay sont modifiés, sont donc considérés comme des éléments nouveaux dans le Royaume. Puisque les scripts qui sélectionnent ces éléments et leur attachent des fonctions s'exécutent à domready et non pendant l'actualisation partielle, cela pose un problème.

Jusqu'ici, je n'ai pas réussi à trouver un moyen de rattacher les scripts aux éléments de #maindisplay après l'avoir partiellement rafraîchie.

Ma question est: Quelle est la meilleure façon de rattacher les scripts à la zone rafraîchie de la page.

Nous vous remercions de vos conseils.

Répondre

0

Vous avez les options suivantes que je peux penser:

  • Mettez le fixer dans une fonction et appeler cette fonction à la page rafraîchir
  • Utilisez la fonctionnalité .live()
  • utilisation .delegate (0) fonctionnalité
  • Mettez la référence Javascript à la fonctionnalité dans une référence dans l'actualisation afin qu'elle s'exécute dans le cadre de cette actualisation.
  • Mettre la fonction dans le rappel
  • font partie de votre setTimeout
  • une autre méthode créative que je ne pensais pas ...

Juste une remarque: je regardais la .delegate() avec une sélection contextuelle ajoutée dans les versions récentes (disponible en 1.4.2 par exemple).

+0

Nous vous remercions de votre réponse, comme question de suivi rapide. L'un des scripts attachés aux éléments est une fonction .tooltip, la fonction se déclenche sur mouseenter. Maintenant, si je l'ai mis comme ça. $ ("corps") délégué ("outil", "mouseenter", function() { $ (this) .tooltip ({// choses \t}); }); Ensuite, l'utilisateur doit d'abord passer la souris sur l'élément, puis passer à nouveau la souris pour obtenir l'info-bulle. Comment utiliser .delegate ou .live sans les faire passer deux fois sur la souris? – BorisKourt

+0

Je pense que cela a à voir avec le niveau de liaison. Examinez le chaînage .delegate et considérez l'événement mouse, que vous voulez conserver aussi local que possible afin qu'il se déclenche sur l'élément de droite et non sur l'élément parent. Gardez à l'esprit avec .delegate, vous pouvez enchaîner alors que .live ne le peut pas. Vous pouvez voir un blog à ce sujet ici: http: //brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery –

+0

Merci Mark, c'était très utile. – BorisKourt

0

Est-ce que load() ne prend pas de fonction de rappel comme deuxième argument? Pourquoi ne pas rattacher les gestionnaires d'événements aux éléments avec cette fonction?

$('#result').load('ajax/test.html', function() { 
    //reattach event handlers here. 
}); 
1

Vous devez utiliser la fonction live() pour attacher votre gestionnaire de clic.