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