<ul class="nav_side">
<li class="" data-display="0">
<ul>
<li class="clear_float">
<text>小程序管理</text>
</li>
<li data-id="9">小程序组装</li>
<li data-id="9">小程序统计</li>
</ul>
</li>
<li data-display="0">
<ul>
<li class="clear_float">
<text>单页管理</text>
</li>
<li data-id="10">单页列表</li>
<li data-id="10">关于我们</li>
<li data-id="10">回收站</li>
</ul>
</li>
</ul>
$(".nav_side>li").each(function (i, dom) {
$(dom).find("ul li:first-child").each(
function (i1, dom1) {
$(dom1).attr("data-display", "0");
$(dom1).on({
//点击事件是这样给添加上去的
click: function () {
if ($(this).attr("data-display") == "0") {
$(".nav_side>li>ul>li").eq(0).attr("data-display", "0");
$(".nav_side").children("li").removeClass("action block");
$(".nav_side").children("li").removeClass("block");
$(".nav_side").children("li").eq(i).addClass("action block");
$(this).attr("data-display", "1");
} else {
$(".nav_side").children("li").eq(i).removeClass("block action");
$(this).attr("data-display", "0");
}
}
});
}
);
});
我不明白我的这个点击事件 为什么有时正常 有时要点击两次才能正常
当前不满足 if 里的条件 执行了 else【else里把作为判断的值改成了满足if的值】这样之后 是不是又会重新执行一次if里面的呀
像这里
if ($(this).attr("data-display") == "0") {
$(this).attr("data-display", "1");
}else {
$(this).attr("data-display", "0");
}
直接找Dom元素不可以嘛,为什么要去用两个each循环
那要是点击的对象必须是li而且我又要知道该li所在的父元素的父元素的li的index值咧
我 好像想到办法了 试一下行不行先 谢谢你了
@StellaHo: 限定点击的是li改改就好了,知道了当前点击的是哪个元素,取父级取同级或者取子级都很容易
@七芯海棠: 我改过来了,没有用两个each了,还是会出现点两次才有效果的,问题应该不是出在那两层遍历里 应该是我那个判断条件的问题。我是在做一个折叠菜单就是把菜单分成几组,点击当前组就展开再点就收起,或点击其他组后当前组也会收起这样的效果 而用来识别是否是收起状态的就是那个 data-display 只要判断是0 就可以作展开操作了 是不是我逻辑哪出问题了
@StellaHo: 当前对象没有data-display属性的时候,$(this).attr("data-display")的值是0吗,好像不是吧 =。=
是undefined 改下你那个判断试试
@七芯海棠: 噢 我之前用遍历添加上去的data-display 现在我 手动加到标签上了<li class="" data-display="0"> 我来回切换到第四次就不能正常切换了 还是不明白
@StellaHo: 应该是逻辑出了问题,在来回切换的过程中代码哪块可能和预期不一样,断点调试检查下
@七芯海棠: 好的 谢谢你
绑定事件之前先解绑元素的所有事件,有可能是因为冒泡引起的触发多次事件
应该不是 因为没有其他事件了 我觉得还是那个判断的问题
@StellaHo: 能否在绑定事件时设置阻止冒泡试试呢?
@StellaHo: 因为根据你的描述很可能是连续触发了多次事件,只有可能是向上冒泡时触发的,在绑定后阻止冒泡试试看可不可行
@nec_ssy: 也不行哦
$(".nav_side>li>ul>li").eq(0).attr("data-display", "0");把这个改成$(".nav_side>li>ul>li:first-child").attr("data-display", "0"); 就好了 是我没有理解好选择器的问题 我要把所有的状态恢复为可点击的时候没有正确的选到所有的