我有这个按钮:
<button type="button" class="themeChanger" data-themeValue="grid" value="Grid">
<img src="templateImages/Icon_200.png" />
</button>
这个jQuery:
$(".themeChanger").click(function () {
alert($(this).attr("data-themeValue"));
alert($(this).data("themeValue"));
});
由于某种原因,第一个警报显示“网格”应该是,但第二个显示未定义。有什么东西让我感到愚蠢吗?
答案 0 :(得分:31)
我认为数据会看小写:alert($(this).data("themevalue")) //grid
或者如果你想使用themeValue,你需要使用:
编辑:
我错了,它与小箱没有任何关系,你可以使用themeValue如果你有属性:data-theme-value
那么你用$(element).data(“themeValue”)
<button class="themeChanger" data-themeValue="Theme1" data-theme-value="Theme2"></button>
$(".themeChanger").click(function() {
var el = $(this);
alert($(this).data("themeValue")); //Theme2
alert($(this).data("themevalue")); //Theme1
});
答案 1 :(得分:23)
如this Learning jQuery article所述,HTML5 data-*
属性由浏览器&gt; JS转换处理,其处理方式与处理CSS名称相同 - 即:
data-
(上面提到的CSS名称比较中不需要的步骤)
data-specialInfo
变为specialInfo
data-more-specialInfo
变为more-specialInfo
-
上拆分
specialInfo
变为[ specialInfo ]
more-specialInfo
变为[ more, specialInfo ]
[ specialInfo ]
变为[ specialinfo ]
[ more, specialInfo ]
变为[ more, specialInfo ]
(没有变化,因为第一部分已经更低)[ specialinfo ]
变为[ specialinfo ]
(没有变化,因为没有其他部分)[ more, specialInfo ]
变为[ more, Specialinfo ]
[ specialinfo ]
变为specialinfo
[ more, Specialinfo ]
变为moreSpecialinfo
在这种情况下,您的data-themeValue
属性可通过$(this).data("themevalue")
访问。而data-theme-value
属性可通过$(this).data("themeValue")
访问。
除非您认识到正在使用的机制,否则它会非常混乱。
答案 2 :(得分:5)
问题是骆驼案。为清楚起见,我会坚持使用属性的data-theme-value
格式。
jquery会自动将.data('some-value')
转换为data('someValue')
请注意,两个警报调用都会返回grid
答案 3 :(得分:4)
我认为数据标签实现中的带连字符的骆驼套管是这里的问题
试试这个jsfiddle - http://jsfiddle.net/FloydPink/fb6Y6/
<button type="button" class="themeChanger" data-theme-value="grid" value="Grid">
data-theme-value
</button>
<button type="button" class="themeChanger" data-themeValue="grid" value="Grid">
data-themeValue
</button>
$(".themeChanger").click(function () {
alert($(this).attr("data-themeValue"));
alert($(this).data("themeValue"));
});