对于多个请求,jQuery数据属性的返回方式不同

时间:2015-07-24 22:28:39

标签: javascript jquery dom closures

我有一个元素:

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

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

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

我在命名空间的javascript函数nameless.modal()中处理数据属性,我使用DOM执行各种操作,包括动画各种div等。

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

我很困惑。显然我的其他代码在某种程度上干扰了jQuery,但是因为我所有的变量和函数名都在我自己的命名空间中......怎么样?

错过了其他什么?

2 个答案:

答案 0 :(得分:0)

似乎jQuery缓存了数据属性。

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

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

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

答案 1 :(得分:0)

jQuery不会动态更新其内部data。使用数据属性时,我会改为定位属性。

结帐this demo

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

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