使用多个事件监听器:为每个元素分配唯一数据?

时间:2015-07-14 05:48:55

标签: javascript javascript-events event-handling

我经常需要在循环中向多个 HTML元素(例如changeclick)注册单用途事件监听器 。 我需要一种方法来在事件触发时区分目标元素。理想情况下,监听器应该有一个变量,该变量根据触发事件的元素而变化。

直接的解决方案是在循环中设置id属性(jsfiddle),并在处理程序中引用this.id。或者,如果需要其他字段,则为data-*属性,而是访问this.dataset.id

然而,这些最终会添加到页面的实际标记中,并且只能存储字符串。如果要分配大量数据,除了字符串之外的特定类型,它可能是不切实际的,并且需要不必要的类型检查或整数解析。

我通过在每个HTML元素上定义一个名为param的新属性来解决这个问题,我可以在处理程序中访问它,如下所示:this.param.address。但turns outbad idea - 一个'功能'由于浏览器的一致性而缺乏任何标准,所以不要依赖它。

另一种方法是通过闭包(jsfiddle)向监听器提供参数。这种方法的缺点是它为每个元素返回一个唯一的侦听器,这可能会影响性能而不仅仅是一个处理程序。

我想到的另一种方法是将实际的元素引用与数据存储在一个数组中,并从事件处理程序(JSFiddle)执行this的查找。

所以我的问题是:是否有更好的(正确的/面向未来的)方法来传递/分配数据到元素事件处理程序,而不必将其存储为属性字符串?

P.S。我也不想依赖jQuery。

使用jQuery,可以使用$(el).bind("click", {foo:i}, buttonClicked)$.data(el, "param", {foo:i})来完成任务。但是,它似乎依赖于能够为元素的对象设置自定义属性,这就是我建议将param用作我的目的的自定义属性。这是否意味着只要属性名称足够独特就可以了?...

0 个答案:

没有答案