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

jQuery: function assigned dynamically is not working

本文关键字:函数 不起作用 动态分配 jQuery      更新时间:2023-09-26

我已经用jQuery实现了一个菜单,其中的项和函数是动态分配的。此代码有效。

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

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

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

和这里一样,但我得到了Uncaught TypeError: Cannot read property 'f' of undefined,因为变量I超出了界限。如何修复此代码?

我建议:

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演示。

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

试试这个:

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