通过jQuery访问自定义属性

3

我需要访问我的链接的自定义属性或数据,但我无法做到。我的代码很简单,但在重复器中。我不知道这是否会导致问题。以下是代码:

 <a class="showAllComm" data-userid='<%# DataBinder.Eval(Container.DataItem, "USER_ID")%>' href="#sa">Show all comments</a>

这是我的点击事件:

$('.showAllComm').click(function(index, element) {
            var commId = $(element).data("userid");
 })

commId未定义,但我在源代码中看到它的值为1。

我如何访问userId?

谢谢。

2个回答

8

使用this来引用元素,而不是第二个参数:

var commId = $(this).data("userid");

事件处理程序接收到的参数不是像使用 .each() 时一样的 indexelement

默认情况下,你只会得到一个传递的 event 参数。

示例: http://jsfiddle.net/Jjbwd/

$('.showAllComm').click(function( event ) {

    alert( event.type ) // click

    var commId = $(this).data("userid");
});

谢谢,但我想知道...无法使用元素访问的原因是什么? - Pabuc
1
@Pabuc 因为回调函数没有第二个参数,唯一的参数是一个 jQuery 事件对象。 - Alnitak
在这些情况下,无需创建 jQuery 对象,更简单的 $.data(this, "userid") 将更加高效...因为它只是进行了一个 this[$.expando] 调用,而不是完整的 jQuery() 调用/初始化。 - Nick Craver
1
@Pabuc:因为jQuery默认不传递第二个参数。 - user113716
@Nick:你确定这样可以最初访问尚未在jQuery.cache中的 data-属性吗?在这个例子中似乎不是那样。 - user113716
@patrick - 啊,你说得对...核心部分出现了一个回归。 - Nick Craver

1

data方法不是attr方法的快捷方式。它需要一个元素和一个属性,根据文档

只需使用attr("data-userid")即可。


我可真是够了。如果一直都用这个功能,或许我就不会懒得在所有数据属性上加前缀“data”了。 - RSG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接