简化'下面的JavaScript代码存在函数message_category_ref()
的问题,它为某些元素创建了一个链接。单击创建的链接时,控制台会显示错误:
未捕获的ReferenceError - 未定义showTopics。
当我在return语句中包含alert()
函数而不是showTopics(如下所示)时,会调用alert()
。不确定为什么showTopics()
无法识别,以及如何解决这个问题?
简化代码:
userapp = function(){
var showTopics = function(catid){
}//showTopics()
var showMessageCategories = function(){
showList4('Berichten','general-com','html','MessageCategoryTable',
['Categories','Subjects','Messages','Last message']);
addRow('MessageCategoryTable',['Privat message']);
for(var i=0,i_max=message_categories.length;i<i_max;i++){
addRow('MessageCategoryTable',[message_category_ref(message_categories[i]['catname'],message_categories[i]['catid'])]);
addRow('MessageCategoryTable',[message_categories[i]['catdescription']]);
}//for
//message_categories[0]
}//showMessageCategories
var message_category_ref = function(catname,catid){
//this one does not work
return '<a id="myLink'+catid+'" href="#" onclick="showTopics(\'' + catid + '\');">'+catname+'</a>';
//this one works
//return '<a id="myLink'+catid+'" href="#" onclick="alert(\'' + catid + '\');">'+catname+'</a>';
}//var message_category_ref
return{showMessageCategories:showMessageCategories}
}(); //userapp
$(document).ready(function(){
userapp.showMessageCategories();
}); //$(document).ready
答案 0 :(得分:4)
函数名称是用于初始化userapp
的匿名函数的本地函数,因此无法从onclick
属性访问它 - 这些表达式在全局范围内进行计算。
将return
行更改为:
return{showMessageCategories:showMessageCategories,
showTopics: showTopics};
然后你可以这样做:
onclick="userapp.showTopic(...
答案 1 :(得分:2)
您的功能不是全球性的。它位于一个封闭区内。您需要将其添加到返回对象,以允许在userapp
之外访问它:
return {
showMessageCategories: showMessageCategories,
showTopics: showTopics // Add this to your return Object
};
同时更改您的onclick
以引用它:
onclick="userapp.showTopics(\'' ... )"