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.
$(".server").on('click', ':not(.delete-server)', function (e) {
e.stopPropagation()
// Show edit dialog
});
Voici le violon: http://jsfiddle.net/9bzmz/3/
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!');
}
});
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.
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
});