2017-07-16 20 views
1

我有一個網頁(Angular 2的前端),我附加了一個簡單的外部JavaScript腳本到HEAD的index.html的。是否有可能獲得所有的DOMS到整個網站(不只是一條路線)

現在,我想從這個外部的JavaScript附加一些功能onclick事件到一些按鈕。

問題是,我有很多路線到這個網站,並在每個路線我有不同的按鈕。

外部javascript很明顯在網頁加載時初始化一次,我無法綁定屬於其他路由的其他DOMS。

例如,如果我要路由/登錄,並附加onClick到idlogin按鈕,並刷新頁面,然後確定JavaScript將工作。

但是,如果我在路由/登錄並附加onclick按鈕註冊與idregister(屬於不同的路線eg /註冊),並刷新頁面然後JavaScript將無法工作,因爲按鈕註冊doenst屬於這條路線。如果我再次將路由改爲/ register,那麼javascript將不起作用。

因此,一個可能的解決方案是,在外部JavaScript負載下將所有DOMS全部獲取到整個網頁(來自所有路徑),然後綁定我想要的功能。

我可以這樣做嗎?

在此先感謝!

編輯:請注意,onclick對某個按鈕的綁定必須發生在外部javascript上。我不能寫。所有的DOM綁定必須在腳本上動態地發生。

+0

什麼是DOMS? – Bergi

回答

2

您需要使用事件委派。下面是關於這種做法一個簡單的例子:

/** 
    * Example of DOM event delegation 
    * @author: Georgi Naumov 
    * [email protected] for contacts and suggestions 
    **/ 
    window.addEventListener('click', function(event) { 
     if(event.target && event.target.tagName && event.target.tagName === 'INPUT') { 
      console.log('button is clicked'); 
     } 
    }); 

這個片段將執行適合所有按鈕,包括那些在未來創建的按鈕。 更多信息,你可以在這裏看到: What is DOM Event delegation? 你可能可以使用一些條件來分離只有你需要的按鈕。

只要記住:
這不是角度的方式。如果你在路由級別上有一些解決方案,可能會更好。

+1

謝謝。這解決了我的問題。乾杯:) – Tasos

相關問題