Javascript 这里的细微错误是什么?

Javascript 这里的细微错误是什么?,javascript,html,Javascript,Html,我放弃了。这看起来很简单,但在我尝试过的任何浏览器(IE8、Firefox 17)中都不起作用。我可以证明javascript是启用的,并且可以在其他使用它的页面上正常工作,但是4秒钟后,它的行为总是像javascript被禁用一样,并重定向到“nojava.html”页面。为什么? <html> <head> <meta http-equiv="refresh" content="4;url=nojava.html"> <title>Test P

我放弃了。这看起来很简单,但在我尝试过的任何浏览器(IE8、Firefox 17)中都不起作用。我可以证明javascript是启用的,并且可以在其他使用它的页面上正常工作,但是4秒钟后,它的行为总是像javascript被禁用一样,并重定向到“nojava.html”页面。为什么?

<html>
<head>
<meta http-equiv="refresh" content="4;url=nojava.html">
<title>Test Page</title>

<script language="JavaScript">
function CheckJava() {
  timerID = setTimeout("after3sec", 3000);
}

function after3sec() {
  window.location="intro1.html";
}
</script>
</head>

<body onload="CheckJava()">
<p>Test text</p>
</body>
</html>

测试页
函数CheckJava(){
timerID=设置超时(“3秒后”,3000);
}
函数after3sec(){
window.location=“intro1.html”;
}
测试文本


我完全希望听到这个答案会感到尴尬…

不要将字符串与
设置超时一起使用,并在使用之前定义函数。
改为:

function after3sec() {
  window.location="intro1.html";
}


function CheckJava() {
  timerID = setTimeout(after3sec, 3000);
}
顺便说一句,有很多更好的方法来检查javascript是否启用,比如
alert('TEST')


另外,请阅读不要将字符串与
设置超时一起使用,并在使用前定义函数。
改为:

function after3sec() {
  window.location="intro1.html";
}


function CheckJava() {
  timerID = setTimeout(after3sec, 3000);
}
顺便说一句,有很多更好的方法来检查javascript是否启用,比如
alert('TEST')


还可以阅读有关

的内容。微妙的错误是,如果将字符串传递给,它将以JavaScript代码的形式计算该字符串。现在,

after3sec
是有效的JS代码,但它只返回对名为
after3sec
的函数的引用(然后丢弃它,因为您没有对它执行任何操作),而不是实际调用该函数

要解决此问题,只需在函数名后附加一对括号:

setTimeout( "after3sec()", 3000 );
或者,更好的做法是,按照gdoron的建议,直接将函数引用传递给
setTimeout

setTimeout( after3sec, 3000 );
事实上,您甚至可以不使用单独的函数来执行此操作:

function CheckJava() {
    timerID = setTimeout( function () {
        window.location = "intro1.html";
    }, 3000 );
}
或者,使用stringy样式:

function CheckJava() {
    timerID = setTimeout( 'window.location = "intro1.html";', 3000 );
}

微妙的错误是,如果将字符串传递给,它将以JavaScript代码的形式计算该字符串。现在,

after3sec
是有效的JS代码,但它只返回对名为
after3sec
的函数的引用(然后丢弃它,因为您没有对它执行任何操作),而不是实际调用该函数

要解决此问题,只需在函数名后附加一对括号:

setTimeout( "after3sec()", 3000 );
或者,更好的做法是,按照gdoron的建议,直接将函数引用传递给
setTimeout

setTimeout( after3sec, 3000 );
事实上,您甚至可以不使用单独的函数来执行此操作:

function CheckJava() {
    timerID = setTimeout( function () {
        window.location = "intro1.html";
    }, 3000 );
}
或者,使用stringy样式:

function CheckJava() {
    timerID = setTimeout( 'window.location = "intro1.html";', 3000 );
}


你想做什么?同样,“Java”和“JavaScript”是完全不同的东西,因为它的价值是什么?你想嵌入Java小程序吗?首先,它说checkJava让我眼睛灼伤。哈哈。其次,我认为问题可能是设置超时。每次调用它时,我总是要说setTimeout(function(){functionName()},3000)@DavidRichard,或者简单地说函数名。。。请阅读我的答案以获取示例。你只是用一个毫无意义的函数来包装这个函数。你想做什么?而且“Java”和“JavaScript”是完全不同的东西,因为它有什么价值?你想嵌入一个Java小程序吗?首先,它说的是checkJava,这让我很恼火。哈哈。其次,我认为问题可能是设置超时。每次调用它时,我总是要说setTimeout(function(){functionName()},3000)@DavidRichard,或者简单地说函数名。。。请阅读我的答案以获取示例。你只是用一个无意义的函数来包装函数,函数的顺序并不重要。例如,
CheckJava()
只有在已经解析了
after3sec()
时才被调用,即使没有解析,这样声明函数也可以确保它们始终可用。函数声明是用JavaScript进行的。函数存在的地方很琐碎。@SethenMaleno,顺序是一个提示,它不是强制性的(正如JSLint所建议的),真正的问题是字符串。@gordon理解,但保留函数声明的原样是完全可以接受的。因为人们没有把他们放在代码的第一位而给他们打电话有点吹毛求疵。我知道我会感到尴尬。现在我必须解释另一个页面如何使用带有字符串的setTimeout,并且工作正常……函数的顺序并不重要。例如,
CheckJava()
只有在已经解析了
after3sec()
时才被调用,即使没有解析,这样声明函数也可以确保它们始终可用。函数声明是用JavaScript进行的。函数存在的地方很琐碎。@SethenMaleno,顺序是一个提示,它不是强制性的(正如JSLint所建议的),真正的问题是字符串。@gordon理解,但保留函数声明的原样是完全可以接受的。因为人们没有把他们放在代码的第一位而给他们打电话有点吹毛求疵。我知道我会感到尴尬。现在我必须解释另一个页面如何使用带字符串的setTimeout,并且工作正常。。。