这段javascript代码为什么把他们放在window.onload 函数里边反而运用不了,一直提示moveElement未定义

<!DOCTYPE html>
<html>
<head>
<title>Explaining the Document Object</title>
<meta charset="utf-8">

</head>
<body>
<p id="message" style="position: absolute;left: 50px;
right: 100px;">Whee!</p>

<script type="text/javascript">

function moveElement(elementID,final_x,final_y,interval){

var elem=document.getElementById(elementID);
var xpos=parseInt(elem.style.left);
var ypos=parseInt(elem.style.top);
if(xpos==final_x&&ypos==final_y){
return true;
}

if(xpos<final_x){
xpos++;
}

if(xpos>final_x){
xpos--;
}
if(ypos<final_y){
ypos++;
}
if (ypos>final_y){
ypos--;
}
elem.style.left=xpos+"px";
elem.style.top=ypos+"px";
var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
movement=setTimeout(repeat,interval);
}
moveElement("message",200,100,10);
</script>
</body>
</html>

这是因为当把moveElement函数放入window.onload后,作用域就变了,变成局部变量了,而setTimeout是运行于全局的(即使它是从window.onload内启动的),对于window.onload内部的moveElement它就看不见了,就认为是未定义的了。

可以这样改一下:

var moveElement;  //把moveElement先声明为全局变量
window.onload=function(){
   moveElement=function(elementID,final_x,final_y,interval){
      var elem=document.getElementById(elementID);
      var xpos=parseInt(elem.style.left);
      var ypos=parseInt(elem.style.top);
      if(xpos==final_x&&ypos==final_y)return true;
      if(xpos<final_x)xpos++;
      if(xpos>final_x)xpos--;
      if(ypos<final_y)ypos++;
      if(ypos>final_y)ypos--;
      elem.style.left=xpos+"px";
      elem.style.top=ypos+"px";
      var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
      setTimeout(repeat,interval);
   }
   moveElement("message",200,100,10);
}

或者这样也行:

var moveElement=function(elementID,final_x,final_y,interval){
   var elem=document.getElementById(elementID);
   var xpos=parseInt(elem.style.left);
   var ypos=parseInt(elem.style.top);
   if(xpos==final_x&&ypos==final_y)return true;
   if(xpos<final_x)xpos++;
   if(xpos>final_x)xpos--;
   if(ypos<final_y)ypos++;
   if(ypos>final_y)ypos--;
   elem.style.left=xpos+"px";
   elem.style.top=ypos+"px";
   var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
   setTimeout(repeat,interval);
};  //在window.onload外面声明moveElement函数
window.onload=function(){
   moveElement("message",200,100,10);
}

建议用第二种

温馨提示:内容为网友见解,仅供参考
无其他回答

为何在window. onload里面调用不了function方法?
这个问题是因为你调用的函数未定义;不过没有看到你的具体代码,你可能是以下情况:1、的确是没有定义这么一个函数;2、定义函数了,但是在你调用的时候,你的函数并没有初始化。将(function () {alert("help me !!!");var gameDraw = new gameDraw("myCanvas");alert("help me11111 !!!")...

...按钮代码为什么要写在window.onload所指向的函数里
window.onload 定义了在页面加载完的时候调用获取按钮的事件或方法,页面是自上而下解析加载的,如果页面中还没有加载出那个按钮,那么执行js的时候会因为获取不到控件而报错。如果不用window.onload,也可以把那段代码卸载页面的最后面,比如前。祝你好运!

javascript里面的window.onload是什么意思?
开发者常常利用`window.onload`来确保在执行某些JavaScript代码之前,页面已经完全加载完毕。这对于依赖于页面元素的JavaScript代码来说尤其重要,因为只有在元素存在的情况下,代码才能正确执行。例如,如果你有一段JavaScript代码需要操作页面上的某个元素,你可以将这段代码放在`window.onload`的事件处理器中,...

javascript(js)函数怎么无法绑定多个onload事件。如下那段代码 我只 ...
alert(typeof window.onload) 是oject并不是function ,如果你在 function shijian(func) {var oldonload=window.onload;\/\/alert(typeof window.onload);如果你添加这一句,你就能看到两个函数的执行结果,后执行\/\/shijian(shiyan)覆盖了上一个。if (typeof window.onload !='funciton') {window.onl...

...的这个函数中为什么可以省略window.onload也达到同样效果?如图_百度...
test(); 是立即执行 test 函数。而 window.onload = test(); 是等到整个页面加载完成时再执行 test 函数。通常要用等到整个页面加载完成时,再执行对页面元素的处理函数,从而防止错误发生。但是你这个 test 函数中没有去操作任何页面元素,所以什么时候执行都不会出错。

一段简单的javascript为什么运行不出来
document.getElementById('d').innerText="13"; 把代码放到BODY里就好了

javascript基础,这段代码最后周期调用提示参数无效是什么情况。直接shake...
把window.onload=function()内定义的所有函数放到外面,需要时再从window.onload=function()内调用

求js什么时候用window.onload()函数
window.onload 是窗口加载的时候 调用的,你要实现的内容就写在里面,当页面加载时,在客户端自动执行你写的脚本。像这样的一般使用匿名函数比如 window.onload = function() { alert('hello');}

如何让页面加载完成后执行js
把语句代码放在window.onload函数里面 例如这段代码,虽然script标签没有在最下方,但javascript语句放在了window.onload里面,所以可以在文档加载完成后执行。 <!doctype html> helloWorld--zxk window.onload=function(){ alert('页面加载完成!'); } 已赞过 已踩过< 你对这个回答的评价是? 评论 收起...

为什么这段javascript运行不了。大家帮忙看看。
alertwindow(){ alert("abc");} 你说这个是什么东西,是方法吗? 少了 function function alertwindow(){ alert("abc");}

相似回答