我想在循环中生成js函数,但我有问题。拜托,有人能告诉我的想法是对的吗?可以在循环中生成函数吗?
var sortItems =
["sortable11","sortable12","sortable13","sortable14","sortable15",
"sortable21","sortable22","sortable23","sortable24","sortable25",
"sortable31","sortable32","sortable33","sortable34","sortable35",
"sortable41","sortable42","sortable43","sortable44","sortable45",
"sortable51","sortable52","sortable53","sortable54","sortable55"];
for ( key in sortItems) {
$(function(){
$('#' + sortItems[key]).sortable({
update: function(event, ui)
{
$.ajax({
type: "POST",
url: "fun/saveOrder.php",
dataType: "text",
data:
{
key:$(this).sortable('toArray')
},
cache: false,
beforeSend: function(){$('#updateResult').html('updating');},
success: function(data){$('#updateResult').html(data);},
error: function(data){$('#updateResult').html(data);}
})
recalculate();
}
})
})
}
答案 0 :(得分:0)
从语法上讲,在JavaScript循环中生成函数是完全没问题的。
不推荐使用:如果你有大量的对象,生成大量的闭包(这就是你正在创建的匿名函数被调用)可能会很慢。但我怀疑你会遇到这种情况。
不建议使用的另一个原因是您在函数中使用的key
变量是var
的引用,它是完全相同的变量,闭包的外部,从而使你的循环在实践中完全无用。也许检查一下this question,它可能会有所帮助。
如果不了解您所面临的问题,就很难说更多。
答案 1 :(得分:0)
如果您首先生成DOM元素数组,则可以删除for循环:
var sortItems = ["sortable11","sortable12","sortable13","sortable14","sortable15",
"sortable21","sortable22","sortable23","sortable24","sortable25",
"sortable31","sortable32","sortable33","sortable34","sortable35",
"sortable41","sortable42","sortable43","sortable44","sortable45",
"sortable51","sortable52","sortable53","sortable54","sortable55"],
sortElements = $.map(sortItems, function(id) {
return document.getElementById(id);
});
$(sortElements).sortable({
// your options here
});
此外,您的循环在每次迭代时都在执行$(function() { ... }
;它只需要一次,因此您可以将其包裹在代码上方(或将此代码移动到<body>
元素的末尾。
答案 2 :(得分:0)
可以在循环中生成/创建函数。其中一种方法可以做到:
var test = ['name','phone','address'];
var test2 = [];
$.each(test,function(k,v){ test2[k] = function(){alert(v)}});
test2[0]; //alerts 'name'
test2[1]; //alerts 'phone'
test2[2]; //alerts 'address'