jquery关于事件的绑定,该怎么处理

jquery关于事件的绑定
本帖最后由 cpu220 于 2014-05-12 23:10:25 编辑
通常绑定事件有三种方式
第一种:
  $('ul li').live('click',function(){ alert(123); } ) ;

第二种:
 $('li').click( function () {alert(123);; });

第三种
$('ul').append('<li   onclick="test()"'>123123</li>');



疑问:
1.如果用第三种,我每动态创建一个  html 标签内容,并在里面写好事件,是不死每次将string插入document后都会执行一次事件绑定。
2.如果用第二种,那么我是全部 li  标签的集合进行绑定,虽然写法上缩到一行。但实际执行上还是没一个对象进行绑定事件。
3. 如果第一种,是不是我执行上只绑定了一次,因为从js的事件上来说,所有绑定事件其实只是注册在标签的 id 上,根据点的对象来获取事件。

我想问的是,哪一种对html标签添加事件的执行效率是最优的,如果有其他方法,请赐教,不胜感激。
 
------解决方案--------------------
你要想在写法更优,建议$('ul li').on();因为在jquery 1.7版本之后,所有的事件绑定的主入口函数是这个。就算click,bind('click',fn);最终还是走的on这条线。
你要想在性能上最优,建议使用事件委托。$('ul').on('click','li',fn);


是不是委托简单性能比较:
http://www.cnblogs.com/aaronjs/p/3440647.html

然后在看看你的写法,live已经在新版中被干掉了,click走on这条线。append只是一个添加dom结构,这种变相的事件绑定风险很大,且不易维护。
------解决方案--------------------
我用的是jquery1.4.2版本,对于楼主上述三种方式,其实前两种是符合jquery规范的,第三种建议不要用了。

此外,第一种live()方式绑事件和第二种方法(实际上是bind()方式绑定事件)区别主要在于,对于动态添加的元素,只能用live()方法绑定事件

比如你$(xxx).append("<li id='ttt'></li>");
那么对这个$("#ttt")绑定事件时,只能用live()


------解决方案--------------------
推荐第一种,属于事件委托
第二种属于常规绑定
第三种建议不要用,就是跟你直接写DOM里面一个样,不易维护

比如第二种常规的绑定,jQuery触发事件后会从你绑定时间的DOM层一层一层冒泡,如果是动态添加的元素就无法触发该事件
而用第一种的话,属于事件委托,事件直接委托在DOM底层,省去了冒泡的时间,提高了执行效率,且可以触发动态添加的元素

另外,如楼上所讲,live在新版本应被干掉了i