2012-07-05 56 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

相關問題