2016-11-07 67 views
-1

我有一個HTML onclick屬性,我試圖在按鍵動態添加其他屬性而不刪除現有屬性。 換句話說....將附加內容(+ =)添加到HTML屬性

說我有

<button onclick="doThis(1)"> 

每次按下按鈕,我想添加到如此在第一時間按下按鈕,你會得到

時間
<button onclick="doThis(1), doThis(2)"> 

第三時間:

<button onclick="doThis(1), doThis(2), doThis(3)"> 

有一些方法做

document.getElementById("mybtn").onclick += doThis($n{index}; 

或者我只是有自主建立的字符串?

我似乎無法弄清楚沒有建立一個大字符串添加到setAttribute。當我嘗試JS代碼上面我的變化崩潰的瀏覽器:(

THX採取看看!

+1

可能的重複[如何添加oncli ck動態使用javascript](http://stackoverflow.com/questions/22604401/how-to-add-onclick-to-a-html-element-dynamically-using-javascript) – Liam

+1

它會使很多更有意義的是隻需要一個處理器來處理邏輯。只需添加一個數組,在該數組中添加用給定參數運行的函數。然後你的處理程序可以簡單地遍歷數組並按照正確的順序執行它們。 – GillesC

+0

@Liam不,這不是一回事。 – Fedreg

回答

3

好吧,我真的不喜歡這個答案,但它確實做你在找什麼我不喜歡它,因爲它依賴於將事件處理程序設置爲DOM對象的屬性,而不是使用W3C DOM Level 2事件模型。但是,除此之外,在這裏您可以...

window.doThisCounter = 1; 
 
var eventList = ""; 
 

 
function doThis(){ 
 
     console.log(eventList); 
 
     window.doThisCounter++; 
 
     eventList += "doThis(" + window.doThisCounter + ");"; 
 
     btnGo.setAttribute("onclick", eventList); 
 
} 
 

 

 
// This will execute once, when page is ready: 
 
window.addEventListener("DOMContentLoaded", function(){ 
 
    
 
    var btn = document.getElementById("btnGo"); 
 

 
    (function(counter){ 
 
    eventList = "doThis(1);"; 
 
    btnGo.setAttribute("onclick", eventList); 
 
    }(window.doThisCounter)); 
 
    
 
});
<button id="btnGo">Click Me!</button>

+0

這不會做OP之後的事情。處理程序對於'doThisCounter'具有相同的值,這意味着'doThis'運行'counter'參數時所有參數都是相同的。 – GillesC

+0

@GillesC顯然,你沒有運行代碼。隨着每個新的事件處理程序註冊,參數都會增加 - 就像OP所示。 「櫃檯」周圍沒有關閉。 –

+0

斯科特,謝謝你的明確答案,但我不認爲我正確地解釋自己。這將更像是每次有人點擊「點擊我」時,第二個櫃檯啓動。相同的功能,相同的代碼,相同的名稱,但獨立的調用相同的功能(雖然原來存在)。希望這是有道理的。 – Fedreg