为动态添加的元素绑定事件有以下几种方式:
1.delegate():向匹配元素的当前或未来的子元素附加一个或多个事件处理器
$(selector).delegate(childSelector,event,data,function)
目前大多数jquery版本都可用,不过我一般不用它。
- $("#searchMoveVideoResult").delegate("ul li","click",function(){
- $(this).css("border","5px solid #000");
- });
- $("#searchMoveVideoResult").delegate("click","ul li",function(){
- $(this).css("border","5px solid #000");
- });
看出它们的不同了吗,第二种写法是错误的,记住一定要把事件写在元素的后面。
2.live():为当前或未来的匹配元素添加一个或多个事件处理器
$(selector).live(event,data,function)
jquery1.8版本以前推荐使用该方法;jquery1.8版本之后就不建议使用了,我试了下,也是无效的,所以高版本的jquery推荐使用on()方法绑定事件。
- $("#searchMoveVideoResult ul li").live("click",function(){
- $(this).css("border","5px solid #000");
- });
3.on():适用于当前及未来的元素(比如由脚本创建的新元素)
$(selector).on(event,childSelector,data,function,map)
试验了下,大多数版本的jquery都是支持这个方法的,也是我比较喜欢使用的方法。
- $("#searchMoveVideoResult").on("click","ul li",function(){
- $(this).css("border","5px solid #000");
- });
- $("#searchMoveVideoResult ul li").on("click",function(){
- $(this).css("border","5px solid #000");
- });