相关疑难解决方法(0)

如何将参数传递给setTimeout函数

我是javascript的新手.我写了一个简单的计数器程序,从10开始倒计时到1.

  <script type="text/javascript">
    function countDown(secs) {
        var element = document.getElementById("status");
        element.innerHTML = "Please wait for "+secs+" seconds";
        if(secs < 1) {
            clearTimeout(timer);
            element.innerHTML = '<h2>Countdown Complete!</h2>';
            element.innerHTML += '<a href="#">Click here now</a>';
        }
        secs--;
 --->       **var timer = setTimeout('countDown('secs')',1000);**
    }
    </script>
    <div id="status"></div>
    <script type="text/javascript">countDown(10);</script>
Run Code Online (Sandbox Code Playgroud)

然后我尝试将参数传递'+secs+'给countDown函数.

var timer = setTimeout('countDown('+secs+')',1000);
Run Code Online (Sandbox Code Playgroud)

以上变更有效.

我的问题是为什么我需要将参数传递为'+ secs +'而不仅仅是'secs'?它有什么不同?

javascript settimeout

6
推荐指数
3
解决办法
4万
查看次数

如果元素已被'鼠标悬停'持续500ms,则使用jQuery运行函数

为了我的用户的理智,我希望在选择器悬停半秒后而不是在它们悬停时立即运行"鼠标悬停"事件.

我首先尝试了一个setTimeout函数但是运行了很长时间,元素已经被徘徊,我猜想我没想过太多.我也花了一天(开和关)搜索(和玩Pacman)没有结果,除非我在寻找错误的东西.

如果可以的话,我想保留这个插件,纯粹是为了运行速度和可维护性.

$("#mySelector").mouseover(function(){
    // Run after 500ms
    $(this).addClass("hasBeen500ms");
});
Run Code Online (Sandbox Code Playgroud)

让我们看看我们是否可以解决这个问题,我知道它会有这么多应用程序!

time jquery events

5
推荐指数
1
解决办法
4455
查看次数

在mouseover中将$(this)传递给setTimeout函数

如果用户在条形图上盘旋一秒钟,我试图在条形图上显示一些信息.这个网站上的答案让我到了这一步

var timer;
$(".session_hover").on({
     'mouseover': function () {
          timer = setTimeout(function () {
              $(this).children('.session_info').css({'top':175,'right':20}).fadeIn('fast');
          }, 1000);
     },
     'mouseout' : function () {
          clearTimeout(timer);
     }
});
Run Code Online (Sandbox Code Playgroud)

当我替换时,上面的代码工作$(this),$(".session_hover")但当然,它会触发$(".session_hover")页面上的所有其他代码.

我如何$(this)进入我的setTimeout函数,以便它只适用于我正在盘旋的div的子元素?

谢谢你的帮助!

html javascript css jquery

5
推荐指数
1
解决办法
1452
查看次数

函数'callAfter'的实现,它允许在一段指定的持续时间后调用任何函数

编辑:这不是如何在setTimeout中传递参数的重复.实际上,我想知道如何编写一个函数,它将被调用作为预定义函数的方法,就像setTimeout API一样.

那么,我如何为函数'callAfter'编写一个实现,它允许在某些指定的持续时间之后使用某些参数调用任何函数,具有以下提到的语法:

示例:假设您有一个名为'sum'的函数,如下所示:

function sum(a, b) {
 console.log('Sum is: ', a + b);
}
Run Code Online (Sandbox Code Playgroud)

现在你应该能够执行:sum.callAfter(5000,8,9);

应该在5秒后使用参数8和9调用函数'sum'.

javascript chaining

5
推荐指数
1
解决办法
497
查看次数

无法在 setTimeout 内设置 innerHTML

尝试设置一个HTML类的innerHTML,它有四个框,每个框依次设置3秒。当innerHTML设置为加载图标时,我可以在没有setTimeout的情况下设置innerHTML。当将innerHTML放入setTimeout中时,将返回以下内容:“未捕获类型错误:无法设置未定义的属性‘innerHTML’”。

尝试调试我的代码,将消息发送到控制台并搜索 stackoverflow,但没有成功。

var x = document.getElementsByClassName("numberBox");


for (var i = 0; i < 4; i++) {
    x[i].innerHTML= '';
    x[i].innerHTML= "<div class='loader'></div>"
}

// function to generate array of 4 random numbers
var randomNums = generateRandomNumbers();


for (var i = 0; i < 4; i++) {
    setTimeout(function () {
        x[i].innerHTML= '';
        x[i].innerHTML = randomNums[i];
    }, 3000 * i);
}
Run Code Online (Sandbox Code Playgroud)

想知道为什么我的innerHTML 不能在这里设置setTimeout 以及我的问题的可能解决方案。

javascript innerhtml typeerror settimeout

5
推荐指数
1
解决办法
1236
查看次数

setInterval在它调用的函数中似乎不喜欢().为什么?

当我执行以下操作时,incidentController10秒后调用并继续执行,每秒都没有问题10:

// This works fine in nodejs v0.11.13
setInterval(incidentController, 10 * 1000);

function incidentController () {
 console.log ('executed'); 
}
Run Code Online (Sandbox Code Playgroud)

但是,这会立即执行并在第二次迭代时抛出以下错误:

//This doesn't. The parens which wrap (123) cause the error.

setInterval(incidentController(123), 10 * 1000);

function incidentController (someInt) {
 console.log ('executed: ', someInt); 
}
Run Code Online (Sandbox Code Playgroud)

错误:

timers.js:287
    callback.apply(this, args);
            ^
TypeError: Cannot read property 'apply' of undefined
    at wrapper [as _onTimeout] (timers.js:287:13)
    at Timer.listOnTimeout (timers.js:133:15)
Run Code Online (Sandbox Code Playgroud)

似乎incidentController是/变得undefined某种程度.有人可以解释为什么这是预期的行为(我认为它是,无论如何)?

我可以很容易地解决这个问题,但我只是好奇它为什么会这样做 - 使得传递参数值不太方便,因为我不能在setInterval …

javascript setinterval node.js

3
推荐指数
1
解决办法
1339
查看次数

如何使用setTimeout调用带有参数的javascript函数

以下功能每5秒显示一次警报:

function foo() {
    bar="foo";
    alert (bar);

    setTimeout(foo, 5000);
}

foo();
Run Code Online (Sandbox Code Playgroud)

但是,当我向函数添加参数并从中调用时setTimeout,它不再等待5秒,它只是无休止地发出警报而没有任何延迟:

function foo(bar) {
    bar="foo";
    alert (bar);

    setTimeout(foo(bar), 5000);
}

foo();
Run Code Online (Sandbox Code Playgroud)

为什么这样,我怎样才能在传递参数时延迟遍历函数?

javascript

3
推荐指数
3
解决办法
110
查看次数

canvas api中的重绘功能

我正在尝试使用canvas API(与html5中使用的相同)在qml中创建一个计时器.我需要每隔一秒左右重绘一次屏幕.是否有任何功能可以用新馈送的参数更新屏幕?例如,我使用弧函数,我指定绘制时钟弧的角度:

ctx.arc(150, 150, 95, 0,1.57,false);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,角度会每隔一秒左右变化一次.

html5 canvas qml qtquick2

2
推荐指数
1
解决办法
2424
查看次数

setTimeout - 回调参数必须是一个函数

我的代码一直在工作,直到我将 node.js 更新到版本 8.11.3

现在,当我尝试使用 setTimeout 调用函数时,总是收到错误“回调参数必须是函数”。

function testFunction(itemid, price) {

  var url = 'https://example.com';
  var options = {
  method: 'get',
  url: url
  }

  request(options, function (err, res, body) {
    var response = JSON.parse(body);

     if(response.status == 'fail'){
        setTimeout(testFunction(itemid, price), 100);
     }
  })

}
Run Code Online (Sandbox Code Playgroud)

javascript callback settimeout node.js

2
推荐指数
2
解决办法
2万
查看次数

为什么 setTimeout 需要匿名函数才能工作?

我读StackOverflow上的答案在这里解释了如何使用的setTimeout来创造一种在网页上反复循环。但是,我想知道为什么 setTimeout 需要匿名函数才能工作。考虑以下代码:

trainingTimer(60,0);

function trainingTimer(duration,c) {
    document.getElementById("timer").innerHTML = "Time left: "+(duration-c);
    if(duration==c) {
        alert("Time is up!");
    }
    else {
        window.setTimeout(trainingTimer(duration,c+1),1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

我是根据上面链接的答案写的,但是当它运行时,它会trainingTimer一次遍历所有 60 个调用,并立即在我的网页上显示“剩余时间:0”。但是,如果我修改

window.setTimeout(trainingTimer(duration,c+1),1000);

trainingTimer(duration,c+1)像这样包装一个匿名函数

window.setTimeout(function() {trainingTimer(duration,c+1)},1000);

那么代码工作得很好。

我想知道为什么我必须将命名函数包装在匿名函数中才能使 setInterval 正常工作。感谢所有的帮助。

javascript setinterval

1
推荐指数
1
解决办法
746
查看次数