jquery en vol stationnaire

J’utilise le code jquery suivant pour afficher un bouton de suppression contextuelle uniquement pour les lignes de la table que nous survolons avec notre souris. Cela fonctionne mais pas pour les lignes qui ont été ajoutées avec js / ajax à la volée …

Y a-t-il un moyen de faire en sorte que cela fonctionne avec des événements en direct?

$("table tr").hover( function () {}, function () {} ); 

jQuery 1.4.1 prend désormais en charge le survol des événements live (), mais uniquement avec une fonction de gestionnaire d’événements:

 $("table tr").live("hover", function () { }); 

Alternativement, vous pouvez fournir deux fonctions, une pour mouseenter et une pour mouseleave:

 $("table tr").live({ mouseenter: function () { }, mouseleave: function () { } }); 
 $('.hoverme').live('mouseover mouseout', function(event) { if (event.type == 'mouseover') { // do something on mouseover } else { // do something on mouseout } }); 

http://api.jquery.com/live/

.live() a été déconseillé à partir de jQuery 1.7

Utilisez plutôt .on() et spécifiez un sélecteur descendant

http://api.jquery.com/on/

 $("table").on({ mouseenter: function(){ $(this).addClass("inside"); }, mouseleave: function(){ $(this).removeClass("inside"); } }, "tr"); // descendant selector 

À partir de jQuery 1.4.1, l’événement hover fonctionne avec live() . En gros, il se lie uniquement aux événements mouseenter et mouseleave, ce que vous pouvez faire avec les versions antérieures à 1.4.1:

 $("table tr") .mouseenter(function() { // Hover starts }) .mouseleave(function() { // Hover ends }); 

Cela nécessite deux liens mais fonctionne aussi bien.

Ce code fonctionne:

  $(".ui-button-text").live( 'hover', function (ev) { if (ev.type == 'mouseover') { $(this).addClass("ui-state-hover"); } if (ev.type == 'mouseout') { $(this).removeClass("ui-state-hover"); } }); 

AVERTISSEMENT: Il y a une pénalité de performance significative avec la version live de hover. C’est particulièrement visible dans une grande page sur IE8.

Je travaille sur un projet où nous chargeons des menus multi-niveaux avec AJAX (nous avons nos raisons :). Quoi qu’il en soit, j’ai utilisé la méthode live pour le vol stationnaire, qui a très bien fonctionné sur Chrome (IE9 était correct, mais pas génial). Cependant, dans IE8, non seulement les menus ont été ralentis (il a fallu passer quelques secondes avant de tomber), mais tout était trop lent sur la page, y compris le défilement et même la vérification de cases à cocher simples.

Lier les événements directement après leur chargement a permis d’obtenir des performances adéquates.