2011-08-05 178 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) –