2011-08-05 12 views
12

añado un botón de forma dinámica en html, como a continuación: En clic del botón que quiero llamar a una función javascript:.agregando el evento onclick al botón agregado dinámicamente?

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; 

¿Hay maneras de resolver esto ?? PLZ me ayude, gracias de antemano

Respuesta

19

probar esto:

but.onclick = callJavascriptFunction; 

o cree el botón envolviéndolo con otro elemento y utilizar innerHTML:

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

Funcionó ... Muchas gracias :) – sanjeev

+0

tío todo está bien ... Pero no puedo dar la identificación por concatenación de la cadena: pero e inc ... Por favor ayuda ...... "pero" + inc + '"esto no funciona – sanjeev

+0

try: span.firstChild.setAttribute (" but "+ inc); después del span.innerHTML, también asumo que inc es una variable, y eso debe establecerse antes de que se use.déjame saber que todavía no funciona para ti. – jerjer

10

Eliminar el() de sus expresiones que no están funcionando obtendrá los resultados deseados que necesita.

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

Por qué la setAttribute cuando también lo hace onclick? ¿No todos los navegadores solo admiten onclick? – TJHeuvel

+0

Simplemente muestre cómo se puede hacer que las líneas que no funcionan funcionen. –

+0

¡Gracias, eso solo me ayudó! –

1
but.onclick = callJavascriptFunction; 

sin comillas dobles no hay paréntesis.

+0

¿y si quieres argumentos? – Alex

2

Trate
but.addEventListener('click', yourFunction) Nota del ausencia de parantheses () después de la nombre de la función. Esto se debe a que está asignando la función, no llamándola.

2

Prueba esto:

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

Esto crea un botón dentro de un DIV que funciona perfectamente!

2

Estaba teniendo un problema similar pero ninguna de estas correcciones funcionó. El problema era que mi botón aún no estaba en la página. La solución a este terminó siendo pasar de esto:

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

a esto:

//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"); } 

no tengo ninguna pista en absoluto por qué esto funciona. Agregar el botón a la página y referirlo de otra manera no funcionó.

+0

Hice esta respuesta hace mucho tiempo y ya no lo recomendaría. En su lugar, use 'btn.addEventListener ('click', function (event) {do stuff});' –

1

Este código funciona bien para mí y se ve más simple. Necesario para llamar a una función con un parámetro específico.

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();};

o

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

+0

> El inconveniente significativo de los eventos en línea es que, a diferencia de los oyentes de eventos descritos anteriormente, solo puede tener asignado un evento en línea. Los eventos en línea se almacenan como un atributo/propiedad del elemento [doc], lo que significa que se puede sobrescribir. (https://stackoverflow.com/a/6348597/1872046) –

Cuestiones relacionadas