Javascript 从setInterval中检索jQuery.data()值
我已经在这个问题上纠缠了一段时间了。我正在使用jQuery的.data()方法将状态存储在我正在编写的插件中。除了我试图从setInterval块中检索这些数据值外,其他一切都正常工作。我可以看到setInterval块中的jQuery对象,但看不到data()方法存储的值Javascript 从setInterval中检索jQuery.data()值,javascript,jquery,Javascript,Jquery,我已经在这个问题上纠缠了一段时间了。我正在使用jQuery的.data()方法将状态存储在我正在编写的插件中。除了我试图从setInterval块中检索这些数据值外,其他一切都正常工作。我可以看到setInterval块中的jQuery对象,但看不到data()方法存储的值 我需要知道为什么setInterval块中未定义它什么是tminusrunning和tminusDecrementCounter?你是想在$tminus下调用它吗?除非扩展jQuery,否则这些调用将出错。如果您使用的是Ch
我需要知道为什么setInterval块中未定义它什么是
tminusrunning
和tminusDecrementCounter
?你是想在$tminus
下调用它吗?除非扩展jQuery,否则这些调用将出错。如果您使用的是Chrome,请检查Javascript控制台,您会看到类似这样的内容:“uncaughttypeerror:Object[Object Object]没有方法'tminusrunning'”。data()不适用于xhtml+IE(请参阅)
或者,这看起来像一个jQ扩展,所以要小心。jQuery有一个(IMO)坏习惯,就是到处使用别名
this
。确保你不依赖于这个
是与它不同的东西。我建议安装firebug,并使用console.log
在设置值的位置和访问它的位置记录此
。如果不是IE的问题,我怀疑这会找到它。终于找到了答案。我用jasmine来测试这个,jasmine jquery库有一个fixtures片段,我显然没有正确使用它。我在一个网页上测试了代码,现在一切都按照计划进行。现在我只需要确保我所有的考试都通过了
我不会接受我自己的回答,因为我没有提供必要的信息。我感谢大家在这件事上的时间。我真希望我能接受别人的回答。使用的jQuery版本是什么?你到底什么时候给
$tminus.data(“tminus.settings”)
?Frederic我在插件中给它赋值。问题似乎只是以前设置的data()值在setInterval块中不可检索。哎呀,不,我已经把代码弄得太乱了,我只是在匆忙将内容复制到so时遗漏了一些东西。我很快就会解决这个问题。tminusIsRunning()和tminusDecrementCounter是包装器,它们访问数据(“tminus.status”)和数据(“tminus.time_剩余”)值。在最初的帖子中提到了它,但可能不够清楚。没有使用IE。我知道“this”的问题,我一直在使用console.log进行调试。
tminusStart: function() {
return this.each(function() {
var $tminus = $(this).data("tminus.state", "running");
var intervalId = setInterval(function(tm) {
if ($tminus.tminusIsRunning()) {
$tminus.tminusDecrementCounter();
$tminus.data("tminus.settings").tick_event();
if ($tminus.tminusTimeRemaining() <= 0) {
$tminus.data("tminus.settings").expiration_event();
}
$tminus.text(tminus.tminusTimeRemaining);
}
else {
clearInterval(intervalId);
}
}, 1000, $tminus);
});
}
tminusStart: function() {
var tminus = this;
tminus.data("tminus.state", "running");
return this.each(function() {
console.log(tminus.data("tminus.state")); // "running"
var intervalId = setInterval(function() {
console.log(tminus.data("tminus.state")); // undefined
}, 1000);
});
}