在JS中使用循环分配事件函数

时间:2011-02-09 22:26:02

标签: javascript

这是我的脚本: 我正在尝试将事件分配给数组中的每个元素。

window.onload = sliding;

function sliding() {
    document.getElementById('tag1').onmouseover = slideout; 
    document.getElementById('tag1').onmouseout = slidein;
}

我尝试使用下面的代码但是没有用。它会触发所有功能自己购买。

window.onload = sliding;
var tags = new Array('tag1','tag2','tag3','tag4','tag5','tag6','tag7','tag8');// List of headings
var pics = new Array('popout1','popout2','popout3','popout4','popout5','popout6','popout7','popout8');// list of images that slide out

function sliding() {
    for (var i = 0; i < tags.length; ++i) {
        document.getElementById('tag1').onmouseover =  setslideout(tags[i],pics[i]);
        document.getElementById('tag1').onmouseout=  setslidein(tags[i],pics[i]);
    }
}

这是完整的代码

window.onload = sliding;
var tags = new Array('tag1','tag2','tag3','tag4','tag5','tag6','tag7','tag8');// List of headings
var pics = new Array('popout1','popout2','popout3','popout4','popout5','popout6','popout7','popout8');// list of images that slide out

function sliding() {
  /*for (var i = 0; i < tags.length; ++i) {
       setslideout(tags[i],pics[i]);
  }/*/
    document.getElementById('tag1').onmouseover = slideout; 
    document.getElementById('tag1').onmouseout = slidein;
}/*
function setslideout(tagsid,picsid){
    document.getElementById(tagsid).onmouseover = slideout(tagsid,picsid);
}*/

function slideout(){
    //alert('over '+ lid);
    if(currpos('popout1') < 200){
        document.getElementById('popout1').style.left = currpos('popout1') + 10 + "px";
        var timer = setTimeout(slideout,10)
    }else{
        clearTimeout(timer);
    }
}
function slidein(){
    //alert('over '+ lid);
    if(currpos('popout1') > 0){
        document.getElementById('popout1').style.left = currpos('popout1') - 20 + "px";
        var timer2 = setTimeout(slidein,10)
    }else{
        clearTimeout(timer2);
    }
}
function currpos(element){
    return document.getElementById(element).offsetLeft; 
}

这是我试图http://signsourceak.com/index2.html(下拉列表中的第一个链接)

1 个答案:

答案 0 :(得分:1)

这是修改后使用闭包的代码版本,希望这可以解决问题:

window.onload = sliding;
var tags = new Array('tag1','tag2','tag3','tag4','tag5','tag6','tag7','tag8');// List of headings
var pics = new Array('popout1','popout2','popout3','popout4','popout5','popout6','popout7','popout8');// list of images that slide out

function sliding() {
    for (var i = 0; i < tags.length; ++i) {
        document.getElementById(tags[i]).onmouseover = (function(j){ 
            return function(){
                setslideout(tags[j], pics[j]);
            }       
        })(i);
        document.getElementById(tags[i]).onmouseout = (function(j){ 
            return function(){
                setslidein(tags[j], pics[j]);
            }   
        })(i);
    }

}