动态改变属性时 jQuery data() 的潜在错误?

发布于 2024-11-29 08:18:45 字数 1321 浏览 3 评论 0原文

我不知道我是否刚刚发现了潜在的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

献世佛 2024-12-06 08:18:45

您使用 .attr() 设置它,但使用 .data() 获取它。

相当确信,当通过.data()获取时,它首先查看jQuery.cache中的数据,看看该属性是否存在。 然后如果没有,它会寻找一个属性。

您应该只通过 data- 属性发送它,但使用 .data() 来获取和设置。

将其更改

selectedOption.text($(this).text()).attr('data-ajax-link', $(this).data('ajax-link'));

为:

  // Use .data()----------------------v
selectedOption.text($(this).text()).data('ajax-link', $(this).data('ajax-link'));

示例: 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 in jQuery.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:

selectedOption.text($(this).text()).attr('data-ajax-link', $(this).data('ajax-link'));

to this:

  // Use .data()----------------------v
selectedOption.text($(this).text()).data('ajax-link', $(this).data('ajax-link'));

Example: http://jsfiddle.net/RLF3W/5/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文