2010-12-11 5 views
1

Donc, je sais que l'un des inconvénients de l'utilisation jQuery.live est l'indisponibilité de .stopPropagation(). Mais j'en ai vraiment besoin.Comment imiter stopPropagation en utilisant jQuery.live

Voici mon cas d'utilisation. J'ai une case à cocher qui est actuellement liée à un clic. Cependant, d'autres cases à cocher apparaissent à l'écran via un appel AJAX, ce qui signifie que j'ai vraiment besoin de .live('click', fn). Malheureusement, la case à cocher est située au-dessus d'un autre élément cliquable, nécessitant .stopPropagation(). Cela fonctionne très bien avec .bind('click', fn), mais l'incapacité de l'utiliser avec .live() me gêne. L'utilisation de return false ne fonctionne pas car la case à cocher ne sera pas cochée.

Des idées sur comment imiter .stopPropagation() lors de l'utilisation .live() sans renvoyer false?

Répondre

1

Au lieu de se lier à un gestionnaire .live des cases à cocher, se lient à un gestionnaire d'événement intelligent sur le récipient, avec un comportement dépendant de lequel élément est le cible de l'événement.

$("#container").click(function(e) { 
    var ele = e.target; 
    if(ele.tagName.toLowerCase() == 'input' 
     && ele.type.toLowerCase() == 'checkbox') { 
     e.stopPropagation(); 
     // do something special for contained checkboxes 
     // e.g.: 
     var val = $(ele).val(); 
    } 
}); 

Here est un exemple d'exemple pour montrer comment cela peut être utilisé.

+0

Je ne suis pas sûr que cela fonctionne tout à fait. Découvrez ma mise à jour et voyez ce que je veux dire: http://jsfiddle.net/g5bn4/3/. J'ajoute une case à cocher en utilisant 'jQuery.live()' et j'ai changé vos identifiants en classes pour pouvoir en utiliser deux. Cliquer sur la case à cocher n'autorise pas l'appel à 'e.stopPropagation'. –

+0

@Josh - Utilisez 'bind' sur un conteneur externe qui n'est * pas * remplacé par votre appel ajax. Voir http://jsfiddle.net/g5bn4/7/ – karim79

Questions connexes