javascript - jquery 的on() 方法绑定了子元素事件,却无法触发。

查看:434
本文介绍了javascript - jquery 的on() 方法绑定了子元素事件,却无法触发。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

一段html代码,结构如下图:



.task-list下有多个结构相同的.task-item,每个.task-item下有一个.detail,每个.detail中又有五个子元素。
我想做这样的效果:当鼠标点击.detail下的input.content和textarea.desc时,文本框的背景颜色就变亮。

一开始我尝试了下列各种方法,都没有用

1.选取.detail 全部后代元素的前两个
  $("div.task-list").on("click",".detail > *:lt(2)",function(e){  
        e.target.style.backgroundColor = "#ffffff"; 
    });
2.在.detail层加限定
  $("div.task-list").on("click",".detail:lt(99) > *:lt(2)",function(e){  
        e.target.style.backgroundColor = "#ffffff";
    });
3.在.task-item层再加一层限定
  $("div.task-list").on("click",".task-item:lt(99) > .detail:lt(99) > *:lt(2)",function(e){  
        e.target.style.backgroundColor = "#ffffff";
    });
.............
.............
.............
基本上在选择器里改来改去,结果都是一模一样,那就是:
只有第一条.task-item里的.detail中的文本框点击会变色,
后面的.task.item里的点击无效。


最终后面用了这种简单的办法解决了问题。。。。。。

    $("div.task-list").on("click",".content, .desc",function(e){   
        e.target.style.backgroundColor = "#ffffff"; 
    });

请问jquery的on()方法的childSelector参数是有什么限制吗,或者还是jquery里lt()这种选择器有什么蹊跷。。。
查了好多资料没有看到满意的答案。望各位不吝赐教,谢谢!!!

解决方案

可以先看下lt方法的使用说明 http://api.jquery.com/lt-sele...
Select all elements at an index less than index within the matched set. 选择匹配集合中所有索引值小于给定index参数的元素。

选择器可以拆分2步分析:

然后加上:lt(2) 自然取到的是

只有第一条.task-item里的.detail中的文本框点击会变色,
后面的.task.item里的点击无效

在线例子https://github.com/huixisheng...

这篇关于javascript - jquery 的on() 方法绑定了子元素事件,却无法触发。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆