我一直坚持这个问题一段时间了。我正在使用jQuery的.data()方法将状态存储在我正在编写的插件中。除了当我尝试从setInterval块中检索这些数据值时,一切正常。我能够在setInterval块中看到jQuery对象,但是我无法看到data()方法存储的值。
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);
});
}
在上面的代码中,$ tminus确实返回了jQuery对象,但对函数的调用 - 调用.data()方法 - 返回undefined; .data(“tminus.settings”)调用也是如此。
任何有助于理解为什么.data()在这里不起作用的帮助将不胜感激。
重写删除功能:
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);
});
}
我需要知道为什么它在setInterval块中未定义
答案 0 :(得分:0)
什么是tminusIsRunning
和tminusDecrementCounter
?你的意思是在$tminus
下打电话吗?除非您正在扩展jQuery,否则这些调用将会出错。如果您使用的是Chrome,请检查Javascript控制台,您应该会看到以下内容:“未捕获的TypeError:对象[对象对象]没有方法'tminusIsRunning'”
答案 1 :(得分:0)
.data()不适用于xhtml + IE(请参阅note in docs)。
或者,这看起来像一个jQ扩展,所以要小心。 jQuery有一个(IMO)坏习惯,在整个地方混淆this
。确保您不依赖于this
与其不同的东西。我建议安装firebug并使用console.log
在您设置值的位置以及访问它的位置记录this
。如果它不是IE问题,我怀疑这会找到它。
答案 2 :(得分:0)
终于明白了。我正在使用jasmine来测试驱动器,而jasmine-jquery库有一个装夹件,我显然没有正确使用。我在网页上测试了代码,现在一切都按计划进行。现在我只需要确保我的所有测试都通过了。
我不会接受我自己的回答,因为我没有提供必要的信息。我感谢大家的时间。我真的希望我能接受别人的回答。