将元素数组附加到元素

时间:2014-11-24 21:23:08

标签: jquery jquery-ui for-loop mouseevent

我试图将所有jquery ui效果附加到图像上的点击事件:

http://jsfiddle.net/jfv7qyff/1/

var effectArray = [
    'blind','bounce','clip',
    'drop','explode','fade',
    'fold','highlight',
    'puff','pulsate',
    'scale','shake',
    'slide','transfer'
];

for(i=0;i<=effectArray.length-1;i++){
    $('#effects img').eq(i).click(function(event){
        console.log(effectArray);
        console.log(i);        
        console.log(effectArray[i]);
    //    $(this).effect(effectArray[i]);
    });
}

问题是,

console.log(effectArray);
console.log(i);  

都返回正确的值(分别是数组和索引)但是:

console.log(effectArray[i]);

只返回undefined。这是为什么?

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是调用事件时,我是effectArray.length。要确保事件保留正确的索引,您需要使用JavaScript闭包:

for(i=0;i<=effectArray.length-1;i++) {
    $('#effects img').eq(i).click((function() { var j = i; return function(event){
        console.log(effectArray);
        console.log(j);        
        console.log(effectArray[j]);
    //    $(this).effect(effectArray[j]);
    });
    })();
}

我还使用立即函数初始化闭包并返回函数处理程序。

希望这有帮助!

一个。