我有以下HTML:
<div class="server" id="32">
<a>Server Name</a>
<div class="delete-server">X</div>
</div>
我正在尝试这样做,当用户点击server
div时,它会显示一个编辑对话框。问题只是在做:
$(".server").click(function () {
//Show edit dialog
});
不起作用,因为如果他们点击删除的X,它会打开编辑对话框。如何使整个div server
具有除delete-server
div之外的点击事件。
答案 0 :(得分:25)
$(".server").on('click', ':not(.delete-server)', function (e) {
e.stopPropagation()
// Show edit dialog
});
答案 1 :(得分:16)
只需检查触发事件的元素是什么:
$(".server").click(function(e) {
if (!$(e.target).hasClass('delete-server')) {
alert('Show dialog!');
}
});
答案 2 :(得分:8)
有另一种方法可以解决这个问题:
$(".server").click(function () {
// show edit dialog
});
$(".delete-server").click(function (event) {
// show delete dialog for $(this).closest(".server")
event.stopPropagation();
});
确保.delete-server
上发出的点击事件不会冒泡到父元素。
答案 3 :(得分:0)
只有这对我有用。
js_object
是元素的jQuery对象,如$('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
});
根据你的情况:
server - 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
});