试图使用settimeout避免分离的函数

时间:2012-09-26 18:48:54

标签: javascript onclick settimeout onclicklistener

这个脚本正在对图像进行“翻转” 在每个鼠标事件例如mousover out并单击

img src已更改, 问题是我试图推迟 执行该功能 由onClick事件执行。

我试图将功能更改为settimeout但没有成功

setTimeOut('functionName(param1, param2)', 5000);

不要调用封装设定时间的函数

我做错了什么?

       <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);
    }
    

2 个答案:

答案 0 :(得分:3)

关闭应该有效:

function timeout_init(obj,images) {
  setTimeout(function() {
    mActive(obj, images);
  }, 5500);
}

这是避免eval类似功能的另一个原因。使用您当前的实现,JavaScript引擎将采用“'mActive(obj, images)'”字符串,并尝试在全局上下文中eval()使用它。到那时,原始objimages变量很久就丢失了。

使用闭包,尽管该函数已完成,但您的匿名函数仍然可以访问timeout_init()参数。但变量幸存下来,因为它们被内部函数引用。

答案 1 :(得分:0)

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

   setTimeout(mActive, 5500, obj, images);