0

我想在循环中生成 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();
                            }
                        })
                    })
                }
4

3 回答 3

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>元素的末尾。

于 2013-04-17T13:25:10.837 回答
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'
于 2013-04-17T13:27:32.333 回答
0

从语法上讲,在 JavaScript 中循环生成函数是非常好的。

但不建议这样做:如果您有大量对象,生成大量闭包(这就是您正在创建的匿名函数的调用方式)可能会很慢。但我怀疑你会遇到这种情况。

不推荐它的另一个原因是,key您在函数内部使用的变量是对闭包之外完全相同的变量的引用,因此var实践中使您的循环完全无用。也许检查一下这个问题,它可能会有所帮助。

在不了解您所面临的问题的情况下,很难说更多。

于 2013-04-17T13:19:13.587 回答