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

Felix Kling 说的是对的;您在 .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 回答
0

试试这段代码创建一个方法fnwebsiteWill

function fnwebsiteWill(ctrl) {
                var $this = ctrl;
                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');
                    });
                }
            }

fnwebsiteWill 是您在 .each 中使用的那个

var websiteWill;
        $.each(cookieConfig.cookies, function (key, value) {
            var levelName = key,
                websiteWill = fnwebsiteWill(this);
        });

再次将相同的函数调用到委托中

  $(document).delegate('.cookie-trigger', 'click', function () {
            fnwebsiteWill(this);
        });
于 2013-07-08T13:41:35.433 回答