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

構文的に言えば、JavaScript でループ内の関数を生成することはまったく問題ありません。

ただし、お勧めしません。多数のオブジェクトがある場合、多数のクロージャ (これは、作成している無名関数と呼ばれるものです) の生成が遅くなる可能性があります。しかし、あなたがそれに遭遇することはないと思います。

推奨されないもう 1 つの理由はkey、関数内で使用している変数が、クロージャの外側varにあるまったく同じ variableへの参照であるため、ループが実際にはまったく役に立たないことです。この質問をチェックしてみてください。役立つかもしれません。

あなたが直面している問題についてもっと知らなければ、それ以上のことを言うのはかなり難しいです.

于 2013-04-17T13:19:13.587 に答える
0

ループ内で関数を生成/作成することができます。それを行う方法の1つ:

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 に答える