如何在Javascript中添加命名空间函数来onclick?

时间:2012-07-05 09:08:21

标签: javascript onclick

在发现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 here

P.S。我必须承认我完全不理解命名空间,所以如果我在这里做错了或以我不应该的方式应用这个概念,我会很感激任何提示或更正

1 个答案:

答案 0 :(得分:4)

那是因为NS在内部声明,因此只存在于函数内:

function(window, undefined) {
    var NS = {};

    // NS exists here ...
}

// ... but not here

如果您希望将其提供给页面的其余部分,则可以执行以下操作:

function(window, undefined) {

    var NS = window.NS = {};

    // NS and window.NS exist here ...
}

// ... and window.NS exists here.