1

如果我使用 jquery$("#my_button").data('my-value', { onClick: function () { my_obj_function(); } });

在另一个功能中我这样做

my-value.onClick.call()有用。

但是如果我尝试在 html 中设置数据属性,它就不起作用。我在 html 中做了这个 <a href='#' data-my-value='{"onClick":"function () { my_obj_function(); }"}'>Click me</a>

calling my-value.onClick.call()我得到 uncaught typeerror : object function() has no method call

我究竟做错了什么?

4

2 回答 2

3

当您使用.data()它设置值时,不会在元素设置 html 属性,jQuery 将其存储在自己的数据结构中。这就是你可以.data()用来存储函数和其他对象的原因。.data() 用于检索html5data-属性,但不能设置它们。

当你有一个 html 属性时,它只是一个字符串,所以你需要eval()它或以某种方式解析它并传递给new Function(). 这不是要走的路。

话虽如此,我不知道怎么my-value.onClick.call()可能工作,因为它实际上是在说my减号value.onClick.call()。假设您已经设置了值,.data()您可以说$("#my_button").data('my-value').onClick.call()...

如果你想data-用 jQuery 设置一个属性,你可以使用.attr()方法而不是.data(), with $("#my_button").attr('data-my-value', ...),但正如已经提到的,这会将它设置为一个字符串。

于 2013-06-27T14:04:27.373 回答
0

你的代码

<a href='#' data-my-value='{"onClick":"function () { my_obj_function(); }"}'>Click me</a>

将其设置为字符串而不是对象。

于 2013-06-27T14:04:42.483 回答