在发现 Javascript 命名空间后,我尝试实现它们,但在尝试将命名空间方法附加到元素的 onclick 时遇到了问题。
我用这个方法来包装我的函数/方法/类(一个简化的概念,不是我的实际代码):
;(function(window, undefined) {
//my namespace
var NS = {};
NS.test = {
f : function(param) {
alert(param);
}
}
NS.test.('test 2');
})(window);
在里面,一切正常,并提示“测试 2”。
但是,当我尝试将该功能附加到单击事件时,通过执行以下操作:
<a href-"#" onclick="NS.test.f('test');">Click me!</a>
它不起作用,就像我在})(window);
零件之后调用该函数时它不起作用一样。
我尝试调用它,window.NS.test.f('test');
但没有任何效果。
如何让 onclick 事件调用我的函数?
我可以在我的包装器中附加一个事件侦听器,就像我对其他 html 元素所做的那样毫无困难,但在这种情况下会出现问题,因为我使用 javascript 生成链接,我发现onclick="doSomething"
为所有人添加更容易和更简单我的链接,而不是创建它们,然后缓存它们并添加事件侦听器。
叫我懒惰,但在这种特殊情况下,我更喜欢这样做
someDiv.innerHTML = my_Generated_Html_Code_With_OnClick;
代替
//demo code, ignore the flaws and the fact it won't work on IE
someDiv.innerHTML = my_generated_Html_code;
myLink = document.getElementById(id);
myLink.addEventListener('mousedown', NS.test.f('test'));
我不使用任何框架,也不希望使用,因为我试图首先更好地理解所谓的 vanilla javascript。
我在这里设置了一个 jsfiddle 。
PS我必须承认我没有完全理解命名空间,所以如果我在这里做错了什么或者以我不应该的方式应用这个概念,我将不胜感激任何提示或更正