调用$ .each中定义的函数

时间:2013-07-08 13:33:39

标签: jquery

我有一个在$ .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

编辑:我已将变量声明为全局^^

3 个答案:

答案 0 :(得分: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()的原始调用中引用它,但您实际上并没有在该调用中执行任何操作,因此我不确定其目的是什么

答案 1 :(得分:0)

Felix Kling说的是对的;你在.each回调函数中声明了这个函数,它只使它成为该函数的本地函数。如果你希望它可以在它之外访问,你需要将它作为一个函数写在那个之外。不知怎的,然后在你所拥有的.each循环中使用那个新函数。例如写下函数:

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

然后在.each

中调用它
$(document).delegate('.cookie-trigger', 'click', websiteWill(id, value);

答案 2 :(得分: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);
        });