我使用xhttpRequest从xml文件中读取数据以构建嵌套列表。 <li></li>
中的所有数据都是从xml文件动态加载的。
ajax和html结构如下所示:
$("#category" ).on('click','.toggle',function(e){
e.stopPropagation();
if(!$(this).hasClass("opened")){
$(this).children("i").removeClass("fa-plus-square");
$(this).children("i").addClass("fa-minus-square");
$(this).children('.sub').show();
$(this).addClass("opened");
}else{
$(this).children("i").removeClass("fa-minus-square");
$(this).children("i").addClass("fa-plus-square");
$(this).children('.sub').hide();
$(this).removeClass("opened");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="category">
<li class="toggle">
<i class="fa"></i><a>category here</a>
<ul class="sub">
<li>product here</li>
</ul>
</li>
</ul>
你们中有谁能为我纠正这个错误吗?感谢。
答案 0 :(得分:0)
问题是,在你抓住它之前,事件已经冒出来了。这是我的小解决方案。
$("#category").on('click', '.toggle', function(e) {
e.stopPropagation();
if (e.target.classList.contains("product")) {
// do nothing
} else {
if (!$(this).hasClass("opened")) {
$(this).children("i").removeClass("fa-plus-square");
$(this).children("i").addClass("fa-minus-square");
$(this).children('.sub').show();
$(this).addClass("opened");
} else {
$(this).children("i").removeClass("fa-minus-square");
$(this).children("i").addClass("fa-plus-square");
$(this).children('.sub').hide();
$(this).removeClass("opened");
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="category">
<li class="toggle">
<i class="fa"></i><a>category here</a>
<ul class="sub">
<li class="product">product here</li>
</ul>
</li>
</ul>