无法找到JavaScript命名空间

时间:2014-05-19 17:53:23

标签: javascript

我正在尝试在JavaScript中创建名称空间,如下面的脚本:

var hlAdmin = hlAdmin || {};

hlAdmin.editCompany = function (src) {
   // function script
}

然后我用HTML调用该函数:

onclick="hlAdmin.editCompany(123)"

我收到引用错误:找不到“editCompany”。

任何人都知道为什么?

3 个答案:

答案 0 :(得分:1)

根据您的评论,我假设以下内容:

等效脚本(和范围界定):

<html><head>

</script>
var hlAdmin = hlAdmin || {};

hlAdmin.editCompany = function (src) {
   // error in this script
}
</script>

</head></body>
  <button onclick="hlAdmin.editCompany(123)">Caption</button>
</body></html>

在此示例中,hlAdmin确实位于全局范围内(主机的根范围,在浏览器中称为window)。
如果(在此示例中)您得到引用错误:Cannot find "editCompany",那么应该查看(浏览器的)错误日志中的其他错误消息,因为当函数中存在致命错误时hlAdmin.editCompany,然后不会创建该函数(因此.editCompany成为指向undefined的属性,而不是指向函数的方法,或.editCompany没有#{1}}。甚至存在(取决于引擎/错误))。

要调查您是否确实存在范围问题,可以通过以下方式对其进行测试:window['hlAdmin'] || (window['hlAdmin']={});(或某些等效变体)。如果这使代码工作,那么你似乎有一些范围问题。

希望这些步骤可以帮助将来的人。

答案 1 :(得分:0)

通常认为混合内联javascript和非内联的不良形式。执行此操作的首选方法是使用事件处理程序将所有javascript保存在一个位置:

window.hlAdmin = window.hlAdmin || {};

window.hlAdmin.editCompany = function (src) {
   // function script
}

document.getElementById('yourElementId').onclick = function() {
    hlAdmin.editCompany(123);
};

更具体地解决问题:可能导致此问题的一件事是hlAdmin对象未在全局范围内结束。您声明此声明位于JavaScript文件顶部&#34;但是如果它在任何类型的函数中(例如函数设置为{{1} ,或jQuery window.onload)当它被声明为$(function() { ... });时,它不会在全局范围内结束。使用var声明的变量最终全局作用域,如果它在任何类型的函数之外的根作用域中。如果不是使用var而是使用var hlAdmin,这将确保即使您已经在文档就绪函数或类似内容中,您也可以创建window.hlAdmin在全局上下文中,如果它实际上是范围问题,它将解决问题。

答案 2 :(得分:0)

我发现了问题。

浏览器(至少Aurora和Chrome)正在删除onclick属性中的命名空间。当您查看浏览器html时,命名空间刚刚从标记中消失。