我使用JavaScript创建了以下HTML,我希望能够听取channel_li
和client_li
上的点击。
生成的HTML
<li cid="4" class="channel_li" style="display: list-item;">Random<ul class="client_ul">
<li class="client_li" clid="14" style="">Hanekawa</li></ul>
</li>
第二个代码片段是我用来生成元素并分配点击事件的JavaScript。我遇到的问题是,当我点击channel_li时没有任何反应,当我点击client_li
时,它会触发channel_li
监听器。有没有解决这个问题?
JS
// Some generation code here.
// $li here is the created channel_li element.
$($li).on("click", "li", function() {
console.log("channel click");
});
// More generation code.
// $foo here is the client_li element.
$($foo).on('li', 'click', function () {
console.log("client click.")
});
答案 0 :(得分:1)
您的选择器错误,因为$li
不是变量或有效选择器:
// $li here is the created channel_li element.
$($li).on("click", "li", function() {
console.log("channel click");
});
的
// $li here is the created channel_li element.
$(document).on("click", "li", function() {
console.log("channel click");
});
您需要如何触发diferens事件使用clase:
// $li here is the created channel_li element.
$(document).on("click", ".client_li", function() {
console.log("Client click");
});
// $li here is the created channel_li element.
$(document).on("click", ".channel_li", function() {
e.stopPropagation();
console.log("Channel click");
});
说明 stopPropagation:阻止事件冒泡DOM树,防止任何父处理程序被通知 事件。
答案 1 :(得分:1)
您需要stopPropagation():http://api.jquery.com/event.stoppropagation/,因为嵌套元素存在问题。
$(document).on("click", "li.channel_li", function() {
alert("channel click");
});
$(document).on("click", "li.client_li", function(e) {
e.stopPropagation();
alert("client click");
});