setTimeout的使用不正确?

时间:2012-02-22 15:31:32

标签: javascript

我写了一个基于一些随机数逻辑触发2个URL的脚本,我试图在任何一个被触发之前设置延迟(半秒),但我认为它没有正常工作。我这样做了吗?代码如下:

var clicks  = "http://www.urlone.com";
var impressions = "http://www.urltwo.com";
var randomNumber = (Math.random()*100);

function callOut() {
for (var i = 0; i < lengthVal; i++){
    if (randomNumber < 75) { 
        var randomCounter = (Math.random()*100);
            if (randomCounter < 50) {
                setTimeout("image1.src = clicks;",500);

            }
            else if (randomCounter > 50) {
                setTimeout("image1.src = impressions;",500);                    
            }
    }
    }
}

4 个答案:

答案 0 :(得分:1)

setTimeout第一个参数应该是一个函数。不是代码串。

  备用语法中的

代码是延迟毫秒后要执行的代码字符串。 (建议不要使用此语法,原因与使用eval())

相同

MDN

setTimeout(function(){...}, 500);

答案 1 :(得分:1)

从这里采取:http://www.codescream.com/?p=18读它应该有帮助:)

如果你想使用setTimeout延迟,你应该这样做:

setTimeout( function () {
      doThings()
}, 1000);

从不这样:

setTimeout( "doThings()", 1000);

答案 2 :(得分:0)

setTimeout("image1.src = clicks;",500);

对于此image1必须在全局上下文中声明,如下所示:

var image1 = document.getElementById('image1');

但你最好在这里使用一个功能。

function setImageSrcClicks(){
    document.getElementById('image1').src = 'http://clicks_url';
}
setTimeout(setImageSrcClicks,500);

答案 3 :(得分:0)

正在注意到将setTimeout与字符串一起使用。以下是我最终如何做到这一点。这是“最好”的方法吗?

var clicks = "http://www.urlone.com";
var impressions = "http://www.urltwo.com";
var conversions = "http://www.urlthree";
var lengthVal = (Math.random() * 20 + 20);
var image1 = new Image();
var image2 = new Image();
var globalCounter = -1;



function callOut() {
    var ord = (Math.random() * 9999999999999) + "";

    var randomNumber = (Math.random() * 100);  // Random value for each call
    if (randomNumber < 75) {
        var randomCounter = Math.random() * 100;
        alert(randomCounter);
        if (randomCounter < 50) {
            image1.src = clicks + ord + "?";
        }
        if (randomCounter > 50) {
            image2.src = impressions + ord + "?";
        }
    }
    if (globalCounter++ < lengthVal) {
        setTimeout(callOut, 1000); // Call itself after another second
    }
}