首页 新闻 会员 周边 捐助

我的这个点击事件 为什么有时正常 有时要点击两次才能正常

0
悬赏园豆:10 [已关闭问题] 关闭于 2017-10-23 18:07
<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");

}

StellaHo的主页 StellaHo | 初学一级 | 园豆:179
提问于:2017-10-23 11:14
< >
分享
所有回答(3)
0

直接找Dom元素不可以嘛,为什么要去用两个each循环

顾星河 | 园豆:7281 (大侠五级) | 2017-10-23 11:42

那要是点击的对象必须是li而且我又要知道该li所在的父元素的父元素的li的index值咧

支持(0) 反对(0) StellaHo | 园豆:179 (初学一级) | 2017-10-23 13:51

我 好像想到办法了 试一下行不行先  谢谢你了

支持(0) 反对(0) StellaHo | 园豆:179 (初学一级) | 2017-10-23 13:52

@StellaHo: 限定点击的是li改改就好了,知道了当前点击的是哪个元素,取父级取同级或者取子级都很容易

支持(0) 反对(0) 顾星河 | 园豆:7281 (大侠五级) | 2017-10-23 14:03

@七芯海棠: 我改过来了,没有用两个each了,还是会出现点两次才有效果的,问题应该不是出在那两层遍历里 应该是我那个判断条件的问题。我是在做一个折叠菜单就是把菜单分成几组,点击当前组就展开再点就收起,或点击其他组后当前组也会收起这样的效果   而用来识别是否是收起状态的就是那个 data-display   只要判断是0 就可以作展开操作了  是不是我逻辑哪出问题了

支持(0) 反对(0) StellaHo | 园豆:179 (初学一级) | 2017-10-23 14:38

@StellaHo: 当前对象没有data-display属性的时候,$(this).attr("data-display")的值是0吗,好像不是吧 =。= 

支持(0) 反对(0) 顾星河 | 园豆:7281 (大侠五级) | 2017-10-23 14:50

是undefined  改下你那个判断试试

支持(0) 反对(0) 顾星河 | 园豆:7281 (大侠五级) | 2017-10-23 14:51

@七芯海棠: 噢 我之前用遍历添加上去的data-display  现在我 手动加到标签上了<li class="" data-display="0">  我来回切换到第四次就不能正常切换了  还是不明白

支持(0) 反对(0) StellaHo | 园豆:179 (初学一级) | 2017-10-23 15:21

@StellaHo: 应该是逻辑出了问题,在来回切换的过程中代码哪块可能和预期不一样,断点调试检查下

支持(0) 反对(0) 顾星河 | 园豆:7281 (大侠五级) | 2017-10-23 15:33

@七芯海棠: 好的 谢谢你

支持(0) 反对(0) StellaHo | 园豆:179 (初学一级) | 2017-10-23 15:42
0

绑定事件之前先解绑元素的所有事件,有可能是因为冒泡引起的触发多次事件

nec_ssy | 园豆:206 (菜鸟二级) | 2017-10-23 16:03

应该不是 因为没有其他事件了 我觉得还是那个判断的问题 

支持(0) 反对(0) StellaHo | 园豆:179 (初学一级) | 2017-10-23 16:22

@StellaHo: 能否在绑定事件时设置阻止冒泡试试呢?

支持(0) 反对(0) nec_ssy | 园豆:206 (菜鸟二级) | 2017-10-23 16:42

@StellaHo: 因为根据你的描述很可能是连续触发了多次事件,只有可能是向上冒泡时触发的,在绑定后阻止冒泡试试看可不可行

支持(0) 反对(0) nec_ssy | 园豆:206 (菜鸟二级) | 2017-10-23 16:45

@nec_ssy: 也不行哦

支持(0) 反对(0) StellaHo | 园豆:179 (初学一级) | 2017-10-23 17:24
0

$(".nav_side>li>ul>li").eq(0).attr("data-display", "0");把这个改成$(".nav_side>li>ul>li:first-child").attr("data-display", "0"); 就好了  是我没有理解好选择器的问题  我要把所有的状态恢复为可点击的时候没有正确的选到所有的

StellaHo | 园豆:179 (初学一级) | 2017-10-23 18:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册