0

ボタンのIDと同じ名前の関数を作成しようとしています

var a = ["ab1","aj6","yt5","gf5","js9"]
for (i = 0; i < a.length; i++) {
    var el = a[i];
    function el(){
        list.find(el);
    }
    $(function() {
        $("#"+el).click(el);
    }
}

これを行うと、

Uncaught TypeError:無名関数でundefinedのプロパティ'handler'を読み取れません

。しかし、関数名をvarではなく「calculate」に変更すると、正常に機能しますel。何か案は?

4

4 に答える 4

2

クリックハンドラーを配列内の「id」を持つ各要素にバインドしようとしている場合は、次のようにします。

var a = ["ab1","aj6","yt5","gf5","js9"]

$.each(a,function(i,val){               //for each item
    $("#"+val).on('click',function(){   //bind a click handler
        list.find(val);                 //that finds that element in "list"
    });

    //or

    $("#"+val).click(function(){ 
        list.find(val); 
    });

    //or

    $("#"+val).bind('click',function(){ 
        list.find(val); 
    });

    //or

    $('body').delegate('#'+val,'click',function(){ 
        list.find(val); 
    });
})
于 2012-04-15T10:52:48.767 に答える
1

何を達成しようとしているのかわかりませんが、「はい、配列値を使用して関数を作成することは可能です」:

var a = ["ab1","aj6","yt5","gf5","js9"];
for (var i = 0; i < a.length; i++) {        
    window[a[i]] = function(){
    };
}

この後、名前を持つ5つのグローバル関数ができ"ab1","aj6","yt5","gf5","js9"ます。

于 2012-04-15T11:01:05.363 に答える
0

同じ名前の変数を2つ持つことはできません。とは両方var elfunction elも呼ばれelます。JavaScriptは、関数名を、関数が割り当てられている変数名(一種)と見なします。

また、おそらく関数宣言の代わりに関数ステートメントを使用する必要があります。詳細については、 http://kangax.github.com/nfe/を参照してください。

于 2012-04-15T10:53:06.567 に答える
-1

これは次のようになりますか?

var a = ["ab1","aj6","yt5","gf5","js9"]
for (i = 0; i < a.length; i++) {
    var el = a[i];

    $("#"+el).click(functon(){
        list.find(el);
    });

}
于 2012-04-15T10:52:39.800 に答える