我有一个在$ .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
编辑:我已将变量声明为全局^^
答案 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);
});