我在传递函数时遇到了一些困难。 我有这样的代码:将参数作为参数传递给jQuery的回调参数
var options = [
{ name: "menu 1", func: function (element) { $(element).css("color", "Red"); } },
{ name: "menu 2", func: function (element) { alert("menu 2"); } },
{ name: "menu 3", func: function (element) { alert("menu 3"); } }
];
// This basically creates a div with ul, and li element for each object in options,
// and attaches click event to each li that should fire provided func.
(function menuMaker(options) {
var menuDiv = $("<div id='test' />");
var menuUl = $("<ul>");
menuDiv.append(menuUl);
for (var i = 0; i < options.length; i++) {
var li = $("<li>" + options[i].name + "</li>");
// **li.click(function() { options[i].func(menuDiv); });**
//>> The line above gives "options[i] is undefined" error. Looks like a scoping issue.
var userFunc = options[i].func;
**li.click(function(){ userFunc(menuDiv);});**
//>> The line above always fires the last function (alert("menu 3"))
menuUl.append(li);
}
$(document.body).append(menuDiv);
})(options);
和我得到我评论这些错误。 任何想法我做错了什么?
谢谢!
所以我最终重写了这样的for循环: for(var i = 0;我”+ options [i] .name +“”); var func = function(uf){return function(){uf(menuDiv); }} //改变范围 li.click(func(options [i] .func)); menuUl.append(li); } 闭合和范围..杜! –
Evgeni