- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个逐渐增强的 <select>
HTML 中的元素。
它使用以下形式,
<ul>
<li></li>
<li></li>
...
</ul>
在当前的实现中,click
事件处理程序附加到每个 li
元素。
当你有大约 1000-2000 个元素时,这会产生问题吗?与将单个事件处理程序附加到 <ul>
相比,它会更慢吗?并从 e.srcElement
中挑选必要的信息?
当前实现:
有完整的列表
<div>
<select>
//1000-2000 elements
<option> </option>
</select>
<ul>
//Mapping the values of the 1000-2000 option tags
<li> </li>
</ul>
</div>
click
事件处理程序映射选定的 li
相当于option
, 将其设置为 selected
项并触发 select
的更改事件.
最佳答案
首先,无论您如何附加点击处理程序,1000-2000 个切换的 DOM 节点本身可能就是一个问题。
委托(delegate)事件通常是一种很好的做法,但不要太过分。共享相同功能的最接近的共同祖先通常是最好的。
我怀疑为每个子元素使用一个事件处理程序是否会对性能或内存产生任何显着影响,但委托(delegate)事件非常有意义,而且在保持干净可维护的代码库方面也是如此。
此外,通过委派事件,您可以自由添加/删除子项,而不必担心附加/分离事件。
示例:
var ul = document.getElementsByTagName('ul')[0] // Or similar...
ul.addEventListener('click', function(e) {
if(e.target.nodeName != 'LI') return;
var li = e.target
// map li -> option
});
当然,您需要使用 attachEvent
和 srcElement
来支持旧版 Internet Explorer。
旁注:请记住,可以使用键盘等访问 native 选择框,因此您最好不要仅依赖点击处理程序来使用 UL/LI 创建“渐进式增强”选择框元素。
关于javascript - 渐进增强的 `select` 元素的 JavaScript 事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659678/
前几天我读到了一种特殊类型的回调,当你重复调用它时,它会随着你的进展而进行。就像第一次调用它时执行 A 并返回一样,然后在下次调用它时执行 B。最终它以某种方式发出信号,表明最终行动已经采取。 我不记
我正在使用 php Gmagick 修改图像。以下代码按预期工作,只是图像不是渐进的。为什么?根据GraphicsMagick docs它应该。作为引用,输入图像为 666 x 1000。 $
我希望能够使用 Flash 播放器传送音乐/mp3,但我想让 mp3 文件无法被嗅探......即你不能使用 safari、firebug 等。使用事件窗口找出 mp3 位置。我没有流媒体服务器。任何
我是一名优秀的程序员,十分优秀!