【发布时间】:2013-06-22 21:03:40
【问题描述】:
我正在努力寻找最有效的方式来挂起活动。
假设我们有这样的结构:
<ul>
<li> 1st li </li>
...
<li> 99999th li </li>
<ul>
所以,我们有大约 10000 个 li 元素,我们想为所有这些元素添加事件监听器,假设我们也可以使用 jQuery。
最初的想法
<li onclick="console.log(this)" >...</li>
这个解决方案的坏处 - 我们增加了 html 标记的大小,因为总是重复 onlick。
第二个想法
$('ul li').on('click', function(){
console.log(this)
})
当然这个解决方案不是一个选项,因为我们添加了 10000 个事件监听器,显然不利于性能。
第三个想法,事件委托
$('ul').on('click', 'li', function(){
console.log(this)
})
对我来说看起来真的很棒,我们只使用一个事件监听器,而不是废弃的 html 标记,它可以按我们的需要工作。
所以,我问了这个问题,因为有时我会查看不同网站的来源,其中很大一部分使用第一种方式。为什么?第一种方式有优势吗?
我猜这可能是因为它更容易捕捉到页面中动态添加的元素,但可能有一些我不知道的东西?
【问题讨论】:
-
- 上的 1 个事件监听器怎么样?
-
我认为最好的方法可能是使用 作为 .on 语句的基本标签 - 这样你只有一个观察者,而不是每个 ul 的一堆。你怎么看?
-
当然,如果页面上只有一个
- :) 同一页面上有许多不同的 ul 用于各种目的,你必须为每个页面添加自己的侦听器?
标签: javascript jquery performance event-handling jquery-events