Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从setInterval中检索jQuery.data()值_Javascript_Jquery - Fatal编程技术网

Javascript 从setInterval中检索jQuery.data()值

Javascript 从setInterval中检索jQuery.data()值,javascript,jquery,Javascript,Jquery,我已经在这个问题上纠缠了一段时间了。我正在使用jQuery的.data()方法将状态存储在我正在编写的插件中。除了我试图从setInterval块中检索这些数据值外,其他一切都正常工作。我可以看到setInterval块中的jQuery对象,但看不到data()方法存储的值 我需要知道为什么setInterval块中未定义它什么是tminusrunning和tminusDecrementCounter?你是想在$tminus下调用它吗?除非扩展jQuery,否则这些调用将出错。如果您使用的是Ch

我已经在这个问题上纠缠了一段时间了。我正在使用jQuery的.data()方法将状态存储在我正在编写的插件中。除了我试图从setInterval块中检索这些数据值外,其他一切都正常工作。我可以看到setInterval块中的jQuery对象,但看不到data()方法存储的值


我需要知道为什么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);
  });
}