什么原因会导致jquery.data()消失?

5

我使用 jQuery 的 element.data() 函数时遇到了重置问题。我已经检查过在点击事件中该元素的数据储存正常。

这里有一些简单的测试,试图复现这个问题(但没有成功)

在数据储存之后发生了一系列操作,包括改变数据字段的 id、表单提交、响应处理、一些渲染等等......总之,足够多的事情让我找到问题变得缓慢。我已经检查了 $.cache 对象,但其中并没有我储存的数据。代码中的所有 .removeData 都指向了编辑输入字段所在表单的提交按钮。

$element.removeData('attribute'); 

你有什么想法,是什么原因导致数据重置?

jQuery.data源在这里


1
你的表单提交是否会触发页面重新加载(因此导致 $ .data 中存储的所有数据丢失)? - m90
1
你是否在代码的某个时刻将该元素从DOM中移除并稍后重新插入? - Frédéric Hamidi
2
尝试在Firefox中安装Firebug和Firequery,然后您就可以看到元素上的数据。在您逐步执行代码时观察它,并查看何时数据消失。 - Richard Dalton
提交是一个ajax提交,所以不会重新加载。我没有删除输入框,所以那也不应该是问题。 - Marcus
我必须在更好的时间进行测试。 我已经使用firequery进行了一些测试,但是还没有大的发现。 这对我来说似乎是一个复杂的问题,因此我只是在JS对象内部实现了缓存系统。 用.data()完成它将是一个更简单的解决方案,我计划进行测试以更好地理解.data()。 - Marcus
3个回答

1
当元素从DOM中移除时,Jquery数据也会被删除。您仍然可以在变异观察器内访问已删除的元素,但其上的Jquery数据已经消失。

1
这就是我的经历。该节点从一个父节点中被剪切并粘贴到另一个父节点中。我在Chrome开发工具中右键单击该节点,选择“添加断点”->“节点删除”,并找到了所有数据被删除的确切位置。感谢@Nick。 - matiu

0

你改过HTML模板了吗?

最近我遇到了一个类似的问题,点击事件时数据会消失。我重新定义了HTML模板并将数据附加在父节点上,但是点击事件却在子节点上触发。

<div> <!-- The data was attached here -->
  <div class="clickable"> <!-- click events were firing here -->


  </div>
</div>

这个问题是一段时间之前的了,但我猜可能是类似的问题。要么重写元素,要么使用错误的节点。 - Marcus

0

这是asp.net吗?我知道使用asp.net ajax进行的ajax调用是非破坏性的后台提交,但它们确实会破坏客户端脚本代码(javascript)。请尝试以下操作:

创建一个文本框html输入(隐藏也可以),并在其中存储数据值。在ajax调用之后检查该输入的值,以确保输入值仍然设置。

如果您仍然拥有该值,但缺少js更新(包括任何js变量),则该ajax调用正在执行不会破坏表单内容但会破坏javascript代码的后台提交。


这不是 .net,也没有使用框架,只用了 jQuery、openlayers 和 JSON APIs。 - Marcus
除非OL或自定义地图库中有东西泄漏出来,否则不应该破坏JS。但它们不进行任何jQuery数据操作,也不涉及具有数据的DOM部分。 - Marcus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接