Javascript 如果单击jQuery元素的子元素而不是元素本身,则函数中断
我在菜单上遇到了一个棘手的情况:Javascript 如果单击jQuery元素的子元素而不是元素本身,则函数中断,javascript,jquery,Javascript,Jquery,我在菜单上遇到了一个棘手的情况: <ul id="menu"> <li class="menuGroup"> <strong>Title</strong> <ul> <li><span>SubTitle<span></strong> <li><a>Element 1 of men
<ul id="menu">
<li class="menuGroup">
<strong>Title</strong>
<ul>
<li><span>SubTitle<span></strong>
<li><a>Element 1 of menu called Title</a></li>
<li><a>Element 2 of menu called Title</a></li>
<li><a>Element 3 of menu called Title</a></li>
</ul>
</li>
</ul>
因此,我想在单击任何元素时切换元素1、2、3。菜单组,但不是子元素 el.on("click", function(e) {
if(!$(e.target).is('strong')){
return
}
var thisTabContents = $(this).children("ul");
console.log(el);
if (!thisTabContents.is(":visible")) {
jq_TabContents.hide();
thisTabContents.show();
} else {
thisTabContents.hide();
}
});
演示:试试看
el.on("click", function(e) {
if(!$(e.target).is('strong')){
return
}
var thisTabContents = $(this).children("ul");
console.log(el);
if (!thisTabContents.is(":visible")) {
jq_TabContents.hide();
thisTabContents.show();
} else {
thisTabContents.hide();
}
});
演示:单击的元素可用作事件目标,因此您可以检查:
var el = $("#menu li");
el.on("click", function(e) {
if(e.target.tagName != 'SPAN') {
var thisTabContents = $(this).children("ul");
if (!thisTabContents.is(":visible")) {
jq_TabContents.hide();
thisTabContents.show();
} else {
thisTabContents.hide();
}
}
});
注意:您的fiddle代码与这里的示例不匹配。在小提琴中,您可以检查是否(e.target.className!=“title”)
单击的元素可用作事件目标,因此您可以检查:
var el = $("#menu li");
el.on("click", function(e) {
if(e.target.tagName != 'SPAN') {
var thisTabContents = $(this).children("ul");
if (!thisTabContents.is(":visible")) {
jq_TabContents.hide();
thisTabContents.show();
} else {
thisTabContents.hide();
}
}
});
注意:您的fiddle代码与这里的示例不匹配。在小提琴中,您可以检查是否(e.target.className!=“title”)
使用
$(“#菜单>li”)相反,只选择直接子项。使用$(“#菜单>li”)相反,只选择直接子元素。在不想添加的元素上放置一个类donthideoncleckelement
,然后单击并隐藏侦听器-
var el = $("#menu li").not(".dontHideOnClickElement");
el.on("click", function(e) {
// some code
});
在您的代码中,我看到您对这些元素使用了title
类,因此代码应该是-
var el = $("#menu li").not(".title");
el.on("click", function(e) {
// some code
});
在不想添加侦听器的元素上放置一个类donthideonclecelement
,然后单击并隐藏侦听器,怎么样-
var el = $("#menu li").not(".dontHideOnClickElement");
el.on("click", function(e) {
// some code
});
在您的代码中,我看到您对这些元素使用了title
类,因此代码应该是-
var el = $("#menu li").not(".title");
el.on("click", function(e) {
// some code
});
在问题中尽量简单,小提琴显示现实生活中的代码。然而,如果(e.target.className!=“title”)
有效,您的解决方案。在问题中尽量简单,其中Fiddle显示真实的代码。然而,如果(e.target.className!=“title”)
有效,您的解决方案。它有效,但@bfavaretto提供了侵入性较小的解决方案。不管怎样,谢谢你。它正在工作,但是@bfavareto提供了侵入性较小的解决方案。不管怎样,谢谢。我的解决方案太懒了,对不起:-)我的解决方案太懒了,对不起:-)