点击链接时无法识别Javascript功能

时间:2014-03-07 21:03:30

标签: javascript jquery

简化'下面的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

2 个答案:

答案 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(\'' ... )"