我已经知道jQuery.data()与.attr()不一样了,并且它不会更新实际的HTML,但是我使用.data(键,值)然后我不能用.data(key)检索更新的更改,这很奇怪,因为我过去做过很多。经过几个小时,我没有想法。
起初我将字符串化并将对象解析为JSON但后来我读到Jquery自动执行此操作,因此它是不必要的并且可能具有破坏性。
<div id="invitationsLooper" class="looper slide" data-looperdata="{}">
(...stuff)
<div id="platform_selector"> </div>
</div>
<script>
var $looper = jQuery("#invitationsLooper");
$looper.data("looperdata",{id:"invitationsLooper"});
console.log("Initializing looperdata: "+$looper.data("looperdata"));
$looper.on("platform_reset", function (event) {
//var $looper = jQuery("#invitationsLooper");
console.log("[Platform reset] event");
console.log($looper);
console.log($looper.data("looperdata"));
var looperdataobject = $looper.data("looperdata");
console.log(looperdataobject);
looperdataobject.idplatform = null;
$looper.data("looperdata", looperdataobject);
console.log(looperdataobject);
});
</script>
该事件在另一个脚本中点击此行启动:
<script>
jQuery("#platform_selector").trigger("platform_reset");
</script>
初始化looperdata:[object Object]
- &gt; platfom_reset事件已解雇
[平台重置]事件
对象[DIV#invitationsLooper.looper.slide]
空
空
TypeError:null没有属性looperdataobject.idplatform = null;
答案 0 :(得分:0)
我发现了这个问题,虽然它非常具体。在脚本的开头,我初始化了looper.js library,如下所示:
jQuery('.looper').looper({interval: false})
我知道这个调用修改了DOM,但是我假设如果在调用之后所有的.data()更改都是安全的。 它不是。它必须有一些延迟修改(可能是一个window.ready调用),因为如果我通过代码触发事件,它可以工作,但是当我通过点击完成它(在所有内容加载后) ),它没有。
我评论说这条线和一切顺利。我认为必须格外小心。
抱歉你的时间。我非常感谢你的帮助。
PS:我对Stack Overflow很新,所以我不知道是否应该删除或重命名这个问题。请告诉我。