动态改变属性时 jQuery data() 的潜在错误?
我不知道我是否刚刚发现了潜在的 jQuery 错误,但请查看以下案例。
如果我动态更改 data-ajax-link
属性,然后尝试使用 $('something').data('ajax-link');
检索到的值仍然是动态更改之前的旧值。
这是一个例子。这是一个自定义下拉菜单,将单击的选项设置为 ul 的第一个子选项。元素的名称以及第一个子元素的 data-ajax-link 将使用单击选项的值进行更新... http://jsfiddle.net/RLF3W/1/
$('.select .option').live('click', function (e) {
e.stopPropagation();
$(".select .option:not('.darr')").hide();
selectedOption = $(this).parents("div.select").find(".option:first");
$(this).siblings().show();
selectedOption.text($(this).text()).attr('data-ajax-link', $(this).data('ajax-link'));
});
$('.select .option:not(".darr")').live('click', function () {
$(this).parents("div.select").find(".option:not('.darr')").hide();
});
$(window).click(function() {
$(".select .option:not('.darr')").hide();
});
$('a#tester').live('click', function(e) {
e.preventDefault();
//var sort = $('#sortb .darr').attr('data-ajax-link');
var sort = $('#sort .darr').data('ajax-link');
$('#output').text(sort)
});
在我的示例中,您可以看到在下拉列表中选择不同的选项然后点击测试链接后,data-ajax-link 的值为仍然是原来的值,尽管如果检查该元素,它实际上会发生变化。如果我使用 .attr('data-ajax-link')
来获取更新的值,它可以正常工作。
我在这里错了吗?我做错了什么或者这是一个错误?
I have no idea if I just found a potential jQuery bug, but check out the following case.
If I'm dynamically changing a data-ajax-link
attribute and then try to get it's value with $('something').data('ajax-link');
the value that's retrieved is still the old one before changing it dynamically.
Here is the example. It's a custom dropDown that sets the clicked option to the first child of the ul. The name of the element as well as the data-ajax-link of the first-child is updated with the values of the clicked option … http://jsfiddle.net/RLF3W/1/
$('.select .option').live('click', function (e) {
e.stopPropagation();
$(".select .option:not('.darr')").hide();
selectedOption = $(this).parents("div.select").find(".option:first");
$(this).siblings().show();
selectedOption.text($(this).text()).attr('data-ajax-link', $(this).data('ajax-link'));
});
$('.select .option:not(".darr")').live('click', function () {
$(this).parents("div.select").find(".option:not('.darr')").hide();
});
$(window).click(function() {
$(".select .option:not('.darr')").hide();
});
$('a#tester').live('click', function(e) {
e.preventDefault();
//var sort = $('#sortb .darr').attr('data-ajax-link');
var sort = $('#sort .darr').data('ajax-link');
$('#output').text(sort)
});
In my example you can see that after selecting a different option in the dropdown and then hit the test link the value of the data-ajax-link is still the original value, even though it's actually changed if the element is inspected. If I use .attr('data-ajax-link')
to get the updated value it works fine.
Am I wrong here and I'm doing something wrong or is this a bug?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您使用
.attr()
设置它,但使用.data()
获取它。我相当确信,当通过
.data()
获取时,它首先查看jQuery.cache
中的数据,看看该属性是否存在。 然后如果没有,它会寻找一个属性。您应该只通过
data-
属性发送它,但使用.data()
来获取和设置。将其更改
为:
示例: http://jsfiddle.net/RLF3W/5 /
You're setting it using
.attr()
, but getting it using.data()
.I'm pretty sure that when getting via
.data()
, it first looks at its data injQuery.cache
to see if the property exists. Then if not, it looks for an attribute.You should just send it via the
data-
attribute but use.data()
to get and set.Change this:
to this:
Example: http://jsfiddle.net/RLF3W/5/