javascript - jq事件委托失败,是选择器的问题?疯掉……
迷茫
迷茫 2017-04-11 11:58:37
[JavaScript讨论组]

html

<ul id="nb">
    <li>你是</li>
    <li>你是</li>
    <li>你是</li>
    <li>你是</li>
    <li>你是</li>
    <li>你是</li>
    <li>你是</li>
</ul>

jq绑定click事件,想给li绑定点击事件

$('#nb').on('click','#nb>li', function () {
        console.log(1);
    });

问题:为何绑定失败?难道是选择器问题?

事件委托不能用子代选择器?已经弄了2个小时,脑袋晕晕的~~~

jq用的是1.11

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(6)
PHPz


选择器


断点查看源码

按照你的代码断点jQuery源码


最后总结一点 遇到问题调试 你就会发现源码内部工作原理 有利于你理解 他的原理 以后使用它坑就越来越少了!

阿神
$('#nb').on('click','li', function () {
        console.log(1);
    });
巴扎黑

还是建议找个靠谱点的教程看看或者好好看看文档吧,事件委托是把事件监听挂到父元素上,然后选择器直接写(父元素下的)子元素就可以了,所以如果是:

$("#nb").on("click", "li", function(e){
    console.log("click!")
});

这么写的话,翻译成大白话就是:

在id为"nb"的dom元素上监听"click"事件,如果是在“li”上发生的就去执行function。

另外除了jQ,也去看看事件模型,起码要说的清楚事件冒泡和事件捕获是怎么回事~


补充:

回复里题主提到需要需要排除嵌套的情况,我觉得并不需要都写到选择器上,直接在回调里加个判断就行了:

$("#nb").on("click", "li", function(e){
    if ($(this).parent().is('#nb')) {
        console.log("click!");
    }
});
大家讲道理

今天我刚看了一个文章,你可以看看http://segmentfault.com/p/121...

迷茫

可以不用on的

$("#nb").find("li").click(function(){
    //...
})

我测试的时候,换成'ul>li'也不行,$('#nb>li')就可以

PHP中文网

$('#nb').on('click','li', function () {

    console.log(1);
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号