2012-07-05 95 views
0

在发现关于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')); 

我不使用任何框架,我也不希望,因为我想首先要更好地理解所谓的香草JavaScript。

我成立了一个jsfiddle here

P.S.我必须承认,我不明白的命名空间完全,所以如果我在这里做得不对或者我不应该来,我将不胜感激任何提示或更正

回答

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. 
+0

是的,我认为多。但有什么方法可以在外面使用它,或者我需要重新考虑我的代码吗? – BBog 2012-07-05 09:12:38

+0

谢谢你,工作,我会在1分钟内将你的答案标记为接受! – BBog 2012-07-05 09:21:33

相关问题