如何用jQuery仅在点击#Threads下的.clickme元素时触发弹窗
解决方案:仅响应#Threads下.clickme的点击事件
没问题,我来帮你搞定这个需求!你现在的代码问题在于只是调用了closest()获取元素,但没有做存在性判断,所以不管点击哪个ul下的.clickme都会弹出提示。下面给你几种靠谱的解决办法:
方法一:直接限定事件委托的目标范围(推荐)
最高效省心的方式是在事件绑定的选择器里直接指定#Threads .clickme,这样事件只会监听#Threads容器下的.clickme元素,完全不需要额外判断:
$(document).on('click','#Threads .clickme', function(){ alert("yes"); });
方法二:在回调中判断父容器
如果因为业务需求,你需要保留对所有.clickme元素的监听,只在点击#Threads下的元素时触发逻辑,那可以在回调里检查当前元素的父级ul是否是#Threads:
方式A:通过closest的存在性判断
$(document).on('click','.clickme', function(){ // 检查当前元素是否在#Threads容器内 if ($(this).closest("#Threads").length) { alert("yes"); } });
方式B:直接检查父ul的ID
$(document).on('click','.clickme', function(){ // 获取最近的ul父元素,判断其ID是否为Threads if ($(this).closest("ul").attr("id") === "Threads") { alert("yes"); } });
简单说下原理:closest()方法会从当前元素向上查找匹配的父元素,找到就返回对应jQuery对象(长度为1),找不到就返回空对象(长度为0),所以通过判断长度就能确定是否在目标容器下。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

