Jquery 调用在$.each中定义的函数

Jquery 调用在$.each中定义的函数,jquery,Jquery,我有一个在$中定义的函数。每个函数如下: var websiteWill; $.each(cookieConfig.cookies,function(key, value){ var levelName = key,

我有一个在$中定义的函数。每个函数如下:

    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');
                        });
                    }
                }
        });
我得到
未捕获类型错误:未定义不是函数


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

在本地上下文之外定义函数:

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');
        });
    }
};

您也可以在原始调用中引用它到
each();您正在.each回调函数中声明函数,这使其仅位于该函数的本地。如果你想在这个循环之外访问它,你需要将它作为一个函数写在这个循环之外,然后在这个循环中使用这个新函数。例如,编写如下函数:

var websiteWill = function(id, value){
// code here
}
然后把它称为内部。每个

$(document).delegate('.cookie-trigger', 'click', websiteWill(id, value);
试试这个代码 创建一个方法
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');
                    });
                }
            }
再次将相同的函数调用到委托中

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

网站将
位于
$本地。每个
回调。我不明白你到底想干什么。也许如果你解释一下你想用这段代码实现什么,我们可以建议一个更好的解决方案。看到回调中第一行的
var
了吗?这使变量成为局部变量。请将
后的逗号替换为分号,然后重试。
编辑:我已将变量声明为全局^
。不,你没有。您可能有,但在该
中。每个
中都有
var级别…,网站将
这意味着,既然变量位于的“范围”中。每个,这意味着您没有使用全局变量there@adeneo是的,每个循环都会重写它,但是由于
它只在循环的范围内,当新循环出现时,它消失了!没有解释的代码很少有用。请解释你改变了什么,以及它是如何解决问题的。
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');
                    });
                }
            }
var websiteWill;
        $.each(cookieConfig.cookies, function (key, value) {
            var levelName = key,
                websiteWill = fnwebsiteWill(this);
        });
  $(document).delegate('.cookie-trigger', 'click', function () {
            fnwebsiteWill(this);
        });