我写了一个基于一些随机数逻辑触发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);
}
}
}
}
答案 0 :(得分:1)
setTimeout
第一个参数应该是一个函数。不是代码串。
备用语法中的代码是延迟毫秒后要执行的代码字符串。 (建议不要使用此语法,原因与使用eval())
相同
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
}
}