Javascript 尝试使用settimeout避免分离函数

Javascript 尝试使用settimeout避免分离函数,javascript,onclick,settimeout,onclicklistener,Javascript,Onclick,Settimeout,Onclicklistener,此脚本正在对图像进行“翻滚” 在每个鼠标事件上,例如鼠标悬停并单击 img src已更改, 问题是我试图拖延 函数的执行 由onClick事件执行 我试图将函数更改为settimeout,但没有成功 setTimeOut('functionName(param1, param2)', 5000); nither调用封装设置超时的函数 我做错了什么 <a href="yourpage.htm"> <img src="images/Button2_Norma

此脚本正在对图像进行“翻滚” 在每个鼠标事件上,例如鼠标悬停并单击

img src已更改, 问题是我试图拖延 函数的执行 由onClick事件执行

我试图将函数更改为settimeout,但没有成功

setTimeOut('functionName(param1, param2)', 5000);
nither调用封装设置超时的函数

我做错了什么

       <a href="yourpage.htm">
    <img src="images/Button2_Normal.PNG" width="150" id="img2" 
onmouseover="mOver(this, image2)" onmouseout="mOut(this, image2)" onclick="mActive(this, image2)" />
                    </a> 

                    <a href="yourpage.htm">
          <img src="images/Button1_Normal.PNG"  width="150" id="img1" 
       onmouseover="mOver(this, image1)" onmouseout="mOut(this, image1)" onclick="mActive(this, image1)">
</a>

  • javascript

    var image1 = new Array("images/Button1_Normal.PNG", "images/Button1_MouseClick.PNG", "images/Button1_MouseOver.PNG");
    var image2 = new Array("images/Button2_Normal.PNG", "images/Button2_MouseClick.PNG", "images/Button2_MouseOver.PNG");
    
    var preloadImages = new Array();  // preloads images
    function Loadimages(images) {
    
        for (i = 0; i < images.length; i++) {
            preloadImages[i] = new Image()
            preloadImages[i].src = images[i]
        }
    }
    Loadimages(image1);
    
    
    lastN = ""
    
    function mOver(obj, images) {
        if (lastN != obj.id) {
            document.images[obj.id].src = (images.length == 3 ? images[2] : images[1])
        }
    }
    
    function mOut(obj, images) {
        if (lastN != obj.id) {
            document.images[obj.id].src = images[0]
        }
    }
    
    function mActive(obj, images) {
        var ts1 = document.getElementById('img1');
        if (typeof obj != "string") { obj = obj.id }
    
        document.images[obj].src = images[1]
        if (lastN != "" && lastN != obj) {
            document.images[lastN].src = images[0]
        }
        lastN = obj
    }
    function timeout_init(obj,images) {
        setTimeout('mActive(obj, images)', 5500);
    }
    
    var image1=新数组(“images/Button1_Normal.PNG”、“images/Button1_MouseClick.PNG”、“images/Button1_MouseOver.PNG”);
    var image2=新数组(“images/Button2_Normal.PNG”、“images/Button2_MouseClick.PNG”、“images/Button2_MouseOver.PNG”);
    var preload images=新数组();//预加载图像
    函数加载图像(图像){
    对于(i=0;i
关闭应该有效:

function timeout_init(obj,images) {
  setTimeout(function() {
    mActive(obj, images);
  }, 5500);
}
这是避免使用
eval
类功能的另一个原因。在当前的实现中,JavaScript引擎将使用“
”mActive(obj,images)
”字符串,并尝试在全局上下文中对其进行评估。到那时,原始的
obj
images
变量早已丢失


使用闭包,您的匿名函数仍然可以访问
timeout\u init()
参数,尽管该函数已完成。但是变量在被内部函数引用时幸存了下来。

您可以在
setTimeout
中传递参数。它将作为
mActive
中的参数提供

   setTimeout(mActive, 5500, obj, images);

切勿将字符串传递给
setTimeout
。永远。@jbabey好的,这是个好主意。。。让我知道。谢谢你,作为避免思考当前方法的开端。我一点儿也不知道如何解决这个问题!尝试一下只是提醒一下--在
setTimeout
中传递附加参数在我们最喜欢的浏览器(IE)中不起作用。很高兴知道这是“我们”的最爱我在一家使用IE的公司工作aplications@LoneXcoder. 是的,在迄今为止的所有IE版本中,只有IE10支持它(尚未发布)。