无法从元素中的data-n获取数据

时间:2015-06-10 18:40:38

标签: javascript jquery

我有Span

<span class="span-link" id="2" data-state="True" onclick="javascript: changestate(this.id);">Change State</span>

在Javascript函数中我使用此代码获取值:

function changestate(_thingid) {
    alert(_thingid);
    var tt = $(this).attr("data-state");
    alert(tt);        
}

undefinded获得data-state。我按$(this).data("state")进行测试 因此得到undefined

有什么问题?

2 个答案:

答案 0 :(得分:2)

这是因为该上下文中的this引用了没有任何属性的window对象。您应该将元素传递给处理程序并使用它而不是this关键字。

... onclick="changestate(this);"
function changestate(thing) {
    var id = thing.id;
    var tt = $(thing).attr("data-state");
    alert(tt);
}

另一种选择是使用传递的id来选择被点击的元素,在这种情况下这不是一个好主意,因为this已经引用了被点击的元素。

由于您使用的是jQuery,因此您也可以使用它的on方法。 this回调中的on关键字是指点击的元素。

$('span.span-link').on('click', function() {
     var id = this.id;
     var tt = $(this).data('data-state');
});

答案 1 :(得分:1)

您正在引用ID,而不是对象,因此请将其更改为:

var tt = $('#'+_thingid).attr("data-state");

https://jsfiddle.net/6ne5b8zm/