0

以下のような $.each 関数内で定義された関数があります。

    var websiteWill;
$.each(cookieConfig.cookies,function(key, value){                                           
            var levelName = key,                                                                     
                websiteWill = function(){
                    alert(this.id);
                    if($('#' + this.id).is(':checked')){
                        $.each(this.value.will,function(){ 
                            $('<li><i class="icon-ok"></i>' + this + '</li>').appendTo(parent  + '-' + levelName + '.will ul');
                        });
                    }
                }
        });

次のように電話しようとするとwebsiteWill();

$(document).delegate('.cookie-trigger', 'click',function(){
    websiteWill();
});

私は得るUncaught TypeError: undefined is not a function

編集:変数をグローバルとして宣言しました^^

4

3 に答える 3

1

ローカル コンテキストの外で関数を定義します。

var websiteWill = function(element){
    alert(element.id);
    if($('#' + element.id).is(':checked')){
        $.each(element.value.will,function(){ 
            $('<li><i class="icon-ok"></i>' + element + '</li>').appendTo(parent  + '-' + levelName + '.will ul');
        });
    }
};

this( への参照をと呼ばれる関数引数への参照に置き換えたことに注意してくださいelement。これは、必要に応じて別のものを呼び出すことができます。)

次に、呼び出しからdelegate()次のように参照できます。

$(document).delegate('.cookie-trigger', 'click', function(){
    websiteWill(this);
});

への元の呼び出し内で参照することもできeach()ますが、実際にはその呼び出しでもしないので、その目的が何であるかはわかりません。

于 2013-07-08T13:39:06.730 に答える
0

フェリックス・クリングの言ったことは正しい。.each コールバック関数内で関数を宣言しているため、その関数に対してのみローカルになります。その外でアクセスできるようにしたい場合は、何らかの方法でその .each の外の関数として記述し、そこにある .each ループ内でその新しい関数を使用する必要があります。たとえば、次のような関数を記述します。

var websiteWill = function(id, value){
// code here
}

そして、それを .each 内で呼び出します

$(document).delegate('.cookie-trigger', 'click', websiteWill(id, value);
于 2013-07-08T13:39:16.453 に答える