【问题标题】:jQuery data attribute is being returned differently for multiple requests对于多个请求,jQuery 数据属性的返回方式不同
【发布时间】:2015-07-24 22:28:39
【问题描述】:

我有一个元素:

  <a id="contactUsLink" class="modalButton homepageButton modalOpenButton" href="#" data-modal='{ldelim} "target" : "#contactDialogue", "action" : "open" {rdelim}'>Contact Us</a>

我为 jQuery 点击事件分配了一个闭包

$('#contactUsLink').click(function(e) {
    e.preventDefault();
    var data = $(this).data('modal');
    modeless.modal(this);
});

我在命名空间的 javascript 函数 nameless.modal() 中处理数据属性,我用 DOM 做各种事情,包括为各种 div 设置动画等。

当我再次单击链接时,可变数据正在返回另一个元素的数据属性。

我很困惑。显然,我的其他代码以某种方式干扰了 jQuery,但由于我所有的变量和函数名称都在我自己的命名空间中......如何?

还有什么遗漏的吗?

【问题讨论】:

  • 我添加了 var 数据以确定数据对于调试不正确。
  • 请显示更多代码
  • 一些代码将帮助我们更多地理解这个好问题。
  • dev.flipkick.media 全文。
  • 请通过编辑在问题中添加包含的代码,请不要在评论中这样做。这样读起来很难。

标签: javascript jquery dom closures


【解决方案1】:

好像jQuery缓存了数据属性。

第 3614 行 - https://code.jquery.com/jquery-2.1.4.js

不知道为什么它会返回另一个对象的缓存数据,但我怀疑我在实现中发现了一个关于缓存如何检索数据的错误。

jQuery.removeData() 将清除此缓存。

【讨论】:

    【解决方案2】:

    jQuery 不会动态更新其内部的data。使用数据属性时,我改为以属性为目标。

    查看this demo:

    // jQuery data - does not update dynamically
    $(this).data('test');
    
    // element attribute - does update dynamcially
    $(this).attr('data-test')
    

    【讨论】:

    • 我认为问题在于,如果您从给定元素请求数据属性,您希望为您指定的元素和数据属性获取数据。在这种情况下,缓存正在返回完全不相关元素的数据属性。如果你清除缓存,你会得到正确的结果。如果我设置了一个类似的代码库,而数据函数的返回则更少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2019-05-07
    相关资源
    最近更新 更多