jQuery:动态分配的函数不起作用

时间:2014-10-05 15:41:14

标签: javascript jquery

我已经用jQuery实现了一个菜单,其中的项目和功能是动态分配的。 This code works

但由于我需要在点击选项时隐藏菜单,我改变了

p.click(funcs[i].f);

p.click(function(){
    menu.hide();
    funcs[i].f;
});

here中,但我得到Uncaught TypeError: Cannot read property 'f' of undefined,因为变量i超出范围。如何修复此代码?

2 个答案:

答案 0 :(得分:0)

试试这个:

        (function(idx) {
            p.click(function(){
                menu.hide();
                funcs[idx].f();
            });
        })(i);

答案 1 :(得分:0)

我建议:

for (var i = 0; i < len; i++) {

    (function(i){$('<p />', {
        'style' : 'cursor: pointer',
        'text' : funcs[i].title,
        'click' : function(){
            funcs[i].f();
            menu.hide();
        }
    }).appendTo(menu)})(i);
}

JS Fiddle demo

上面将i变量传递到内部范围,并使用稍微不同(由于个人偏好)的方法来创建<p>元素。