YUI3-具有相同类的链接的点击事件处理
YUI3 - Onclick event handling for links having same classes
问题:YUI3-具有相同类的链接的点击事件处理
我们在页面中有几个链接有相同的类。当我点击其中一个链接时,会根据点击的链接采取一些不同的操作,例如
<a href="?page=1" data="test1" class="sample">One</a>
<a href="?page=2" data="test2" class="sample">two</a>
<a href="?page=3" data="test3" class="sample">three</a>
处理程序代码:
Y.all('.sample').on('click', function(e){
e.preventDefault();
alert(this.getAttribute("data"));
});
当我点击任何链接时,我会得到所有"数据"属性的列表。我们只需要点击链接的数据。
您也可以使用e.target
而不是this
来访问被单击的元素:
Y.all('.sample').on('click', function(e){
e.preventDefault();
alert(e.target.getAttribute("data"));
});
为了获得更好的性能,您可以使用事件委派:
Y.one('body').delegate('click', function(e){
e.preventDefault();
alert(this.getAttribute("data"));
}, '.sample');
all
为您提供了一个匹配元素的列表。您可以使用each
来遍历列表,并为单个节点做一些事情。有关更多信息,请参阅其节点类API。
以下是代码,以及关于jsfiddle的一个示例。
Y.all('.sample').each(function(node) {
node.on('click', function(e) {
e.preventDefault();
alert(node.getAttribute("data"));
});
});
yuilibrary.com上的活动用户指南中也有关于此问题的常见问题解答条目(http://yuilibrary.com/yui/docs/event/#nodelist-这个)。通常最好使用事件委派。
这里的事件委派是更好的解决方案,同意@juandopazo
如果你不想使用委派,你可以使用Y.all('.sample').each(…)(解决方案来自@user322896)或e.target(解决方案源自@juandopazo),但我通常用另一种方式:
Y.on('click', function(e){
e.preventDefault();
alert(this.getAttribute("data"));
}, '.sample');
这不是委托语法(侦听器将直接附加在链接上),也没有NodeList对象,因此this
引用特定的链接节点。与Y.all('.sample')
相比,这种方式也具有性能优势,请阅读:为什么我要使用Y.on()或Y.delegate()而不是node.on()和node.delete()?
相关文章:
- 链接无法处理图像
- 取消 iframe 中具有 target=“_parent” 属性的链接事件
- YUI3-具有相同类的链接的点击事件处理
- jQuery 选择没有任何 JS 事件链接的链接,以便 PJAX 仅处理链接
- 谷歌分析出站链接事件跟踪
- 使用 jQuery 的链接事件侦听器
- jQuery - 如何在追加的选择器上链接事件
- 图像映射中的多链接事件不起作用
- JQuery锚链接事件处理程序不适用于“;这个“;
- javascript菜单上的活动链接可以处理父链接,而不仅仅是子链接
- 如何防止window.onbeforeunload事件被按钮和链接事件触发
- 使用jQuery Deferred链接AJAX处理程序
- onclick事件无法处理javascript中的链接
- rails中的事件/链接处理
- 将单击事件触发到链接上的单击处理程序
- 链接不能在带有preventDefault事件处理程序的元素中工作
- 没有通过面包屑链接附加的JQuery事件处理程序
- 在jQuery的链式事件处理程序之间传递局部变量
- jQuery:显示"返回顶部”;滚动链接?不处理窗口
- 如何使DataTable行及其列具有两个独立的onclick链接事件