2011-08-05 175 views
12

我動態添加一個按鈕,在HTML象下面這樣: 該按鈕的點擊我要調用一個JavaScript函數:添加onclick事件來動態添加按鈕?

var but = document.createElement("button"); 

but.value="delete row"; 

but.setAttribute("onclick","callJavascriptFunction()"); 
//this is not working 

but.onclick="callJavascriptFunction()" 
//this is also not working 

document.getElementById("but").onclick="callJavascriptFunction()" 
//this is also not working 

but.id="but"+inc; 

是否有解決這個任何方式?? plz幫助我,謝謝 提前

回答

19

試試這個:

but.onclick = callJavascriptFunction; 

或通過與其他元素包裹它創建按鈕,並使用innerHTML:

var span = document.createElement('span'); 
span.innerHTML = '<button id="but' + inc +'" onclick="callJavascriptFunction()" />'; 
+0

它的工作....非常感謝:) – sanjeev

+0

花花公子一切都OK ..但我無法通過concatinating字符串給出ID:但是和inc ... Plz help ......「但是' + inc +'「這不起作用 – sanjeev

+0

嘗試:span.firstChild.setAttribute(」but「+ inc);在span.innerHTML之後,我也假定inc是一個變量,並且在使用它之前必須設置它。讓我知道它仍然不適合你。 – jerjer

10

從您的表達式中刪除()不工作將得到您需要的所需結果。

but.setAttribute("onclick",callJavascriptFunction); 
but.onclick= callJavascriptFunction; 
document.getElementById("but").onclick=callJavascriptFunction; 
+1

爲什麼當你還做的onclick的的setAttribute?不是所有的瀏覽器都支持onclick? – TJHeuvel

+0

只顯示不工作的線路如何工作。 –

+0

謝謝,那只是幫助我! –

1
but.onclick = callJavascriptFunction; 

沒有雙引號沒有括號。

+0

如果您需要參數,該怎麼辦? – Alex

2

嘗試
but.addEventListener('click', yourFunction) 注意缺席後的括號()函數名稱。這是因爲你正在分配函數,而不是調用它。

2

試試這個:

var inputTag = document.createElement("div");    
inputTag.innerHTML = "<input type = 'button' value = 'oooh' onClick = 'your_function_name()'>";  
document.body.appendChild(inputTag); 

這其中完美的作品一個DIV內創建一個按鈕!

2

我有一個類似的問題,但沒有這些修復工作。問題是我的按鈕還沒有在頁面上。對此問題進行修復結束了自這是怎麼回事:

//Bad code. 
var btn = document.createElement('button'); 
btn.onClick = function() { console.log("hey"); } 

這樣:

//Working Code. I don't like it, but it works. 
var btn = document.createElement('button'); 
var wrapper = document.createElement('div'); 
wrapper.appendChild(btn); 

document.body.appendChild(wrapper); 
var buttons = wrapper.getElementsByTagName("BUTTON"); 
buttons[0].onclick = function(){ console.log("hey"); } 

我不知道在所有的爲什麼這個工程。將該按鈕添加到頁面並以任何其他方式引用它都不起作用。

+0

我很久以前就做出了這個答案,不再推薦它。相反,使用'btn.addEventListener('click',function(event){do stuff});' –

1

此代碼對我很好,看起來更簡單。必須使用特定參數調用函數。

var btn = document.createElement("BUTTON"); //<button> element 
var t = document.createTextNode("MyButton"); // Create a text node 
btn.appendChild(t); 

btn.onclick = function(){myFunction(myparameter)}; 
document.getElementById("myView").appendChild(btn);//to show on myView 
0

but.onclick = function() { yourjavascriptfunction();};

but.onclick = function() { functionwithparam(param);};

+0

>內聯事件的一個顯着缺點是,與上述事件監聽器不同,您可能只分配了一個內聯事件。內聯事件存儲爲元素[doc]的屬性/屬性,這意味着它可以被覆蓋。 (https://stackoverflow.com/a/6348597/1872046) –