Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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 在这种情况下,如何设置Interval()和removeInterval()?_Javascript_Jquery - Fatal编程技术网

Javascript 在这种情况下,如何设置Interval()和removeInterval()?

Javascript 在这种情况下,如何设置Interval()和removeInterval()?,javascript,jquery,Javascript,Jquery,我知道为了删除一个区间,需要存储对它的引用,所以我想我会将函数返回存储在一个全局数组中。 但为什么当我点击一个单元格时,间隔一直在持续,只有一个停止(我看到第一个和最后一个单元格停止闪烁) 我想让它做的是在表行的所有单元格(不包括第一行)上添加一个连续的fadeTo,并提供一个侦听器,单击这些单元格中的任何一个都会停止所有单元格上的动画 以下是我迄今为止所做的最大努力(): var区间; var目标=$(“#表”); 变量数量=目标查找('td:contains(Price)'); var行=最

我知道为了删除一个区间,需要存储对它的引用,所以我想我会将函数返回存储在一个全局数组中。 但为什么当我点击一个单元格时,间隔一直在持续,只有一个停止(我看到第一个和最后一个单元格停止闪烁)

我想让它做的是在表行的所有单元格(不包括第一行)上添加一个连续的fadeTo,并提供一个侦听器,单击这些单元格中的任何一个都会停止所有单元格上的动画

以下是我迄今为止所做的最大努力():

var区间;
var目标=$(“#表”);
变量数量=目标查找('td:contains(Price)');
var行=最近数量('tr');
arr=新数组();
行。查找('td')。每个(函数(){
如果($(this).text()!=“价格”){
间隔=新数组();
添加动画($(此));
}
});
函数addAnimation(单元格){
var intv=setInterval(函数(){
细胞fadeTo(“缓慢”,0.3);
单元格。fadeTo(“慢速”,1);
}, 1000);
间歇推送(intv);
单元格。单击(函数(){
对于(变量i=0;i
您多次实例化Interval数组,并在for循环中增加错误的参数:

var intervals = [],
    target = $('#table'),
    qty = target.find('td:contains(Price)'),
    row = qty.closest('tr');

row.find('td').each( function() {
    if ($(this).text() !== "Price" ) {
        addAnimation($(this));
    }
});

function addAnimation(cell) {
    var intv = setInterval(function() {
        cell.fadeTo("slow", 0.3);
        cell.fadeTo("slow", 1);
    }, 1000);
    intervals.push(intv);

    cell.click(function() {
        for (var i = 0; i < intervals.length; i++) {
            window.clearInterval(intervals[i]);
        }
        $(this).stop();
    });
}
var区间=[],
目标=$(“#表”),
数量=目标查找('td:contains(Price)'),
行=最近的数量(“tr”);
行。查找('td')。每个(函数(){
如果($(this).text()!=“价格”){
添加动画($(此));
}
});
函数addAnimation(单元格){
var intv=setInterval(函数(){
细胞fadeTo(“缓慢”,0.3);
单元格。fadeTo(“慢速”,1);
}, 1000);
间歇推送(intv);
单元格。单击(函数(){
对于(变量i=0;i

请参阅:

您的另一个问题是:

var intervals;
...
if ($(this).text() !== "Price" ) {
    intervals = new Array();
    addAnimation($(this));
每次都会创建一个新数组。在if块中声明并删除创建新数组的行时,应初始化间隔:

var intervals = [];
...
if ($(this).text() !== "Price" ) {
    addAnimation($(this));
}
但是,您可能希望多次运行此操作,因此在清除间隔时应清除数组,例如:

function addAnimation(cell) {
    var intv = setInterval(function() {
        cell.fadeTo("slow", 0.3);
        cell.fadeTo("slow", 1);
    }, 1000);
    intervals.push(intv);
    cell.click(function() {
        for (var i = 0; i < intervals.length; intervals++) {
            window.clearInterval(intervals[i]);
        }

        // reset the array
        intervals = [];

    });
}
  while (intervals.length) {
    window.clearInterval(intervals.pop());
  }

它可以停止间隔并一次性清除阵列。:-)

i
不是您在这行中所认为的:
window.clearInterval(interval[i])。谷歌javascript闭包。除此之外,您的代码看起来应该可以工作。@blgt您走错了方向,与闭包无关(我认为这是您的意思,而不是“上下文”)。@RobG Yep,更正。不是吗?编辑:事实上你是对的,这不是唯一的问题。但是它是其中之一。
我想我会将函数返回存储在一个全局数组中
,如果
var interval
正在创建一个全局数组,那么剩下的代码也会在全局数组中放入大量的内容namespace@PaulS. 如果您能指出该代码的任何其他问题,我将不胜感激,这里有一个到目前为止指向我的补丁-感谢您发现了这一点。但不幸的是,它并没有解决主要问题然后完全忘记查看循环?哈。。。我怎么会忘了呢?我今天尝试了很多东西,这段代码乱七八糟。谢谢,需要新的视角:)
  while (intervals.length) {
    window.clearInterval(intervals.pop());
  }