web-dev-qa-db-fra.com

jQuery Cliquez événement sur Div, sauf Child Div

J'ai le code HTML suivant:

<div class="server" id="32">
  <a>Server Name</a>
  <div class="delete-server">X</div>
</div>

J'essaie de faire en sorte que lorsque les utilisateurs cliquent sur la variable server, une boîte de dialogue d'édition apparaît. Le problème consiste simplement à:

 $(".server").click(function () {
     //Show edit dialog
 });

Ne fonctionne pas, car s’ils cliquent sur le X qui est supprimé, la boîte de dialogue d’édition s’affiche. Comment faire en sorte que toute la variable div server ait l'événement click, à l'exception du delete-server div.

20
Justin
$(".server").on('click', ':not(.delete-server)', function (e) {
     e.stopPropagation()
     // Show edit dialog
});

Voici le violon: http://jsfiddle.net/9bzmz/3/

24
Joseph Silber

Il suffit de vérifier quel est l'élément qui a déclenché l'événement:

$(".server").click(function(e) {
    if (!$(e.target).hasClass('delete-server')) {
        alert('Show dialog!');
    }
});​

LIVE DEMO

15
gdoron

Il existe un autre moyen de résoudre ce problème:

$(".server").click(function () {
    // show edit dialog
});
$(".delete-server").click(function (event) {
    // show delete dialog for $(this).closest(".server")
    event.stopPropagation();
});

Assurez-vous simplement qu'un événement de clic émis sur .delete-server ne s'affiche pas dans l'élément parent.

8
Tomalak

Seulement ça marche pour moi. 

js_object est un objet jQuery pour méta parent comme une $('body')

jq_object.on('click', '.js-parent :not(.js-child-1, .js-child-2)', function(event) {
    //your code
});

jq_object.on('click', '.js-child-1', function(event) {
    //your code
});

jq_object.on('click', '.js-child-2', function(event) {
    //your code
});

Pour votre cas:

serveur - js-parent

delete-server - js-child-1

jq_object.on('click', '.server :not(.delete-server)', function(event) {
    //your code
});

jq_object.on('click', '.delete-server', function(event) {
    //your code
});
0
German Khokhlov