Agregue el evento onclick al elemento recién agregado en JavaScript

He intentado agregar el evento onclick a los nuevos elementos que agregué con JavaScript.

El problema es cuando reviso document.body.innerHTML. Puedo ver que onclick = alert ('blah') se agrega al nuevo elemento.

Pero cuando hago clic en ese elemento, no veo que el cuadro de alerta esté funcionando. De hecho, todo lo relacionado con JavaScript no funciona.

aquí es lo que uso para agregar un nuevo elemento:

function add_img() { var elemm = document.createElement('rvml:image'); elemm.src = 'blah.png'; elemm.className = 'rvml'; elemm.onclick = "alert('blah')"; document.body.appendChild(elemm); elemm.id = "gogo"; elemm.style.position='absolute'; elemm.style.width=55; elemm.style.height=55; elemm.style.top=200; elemm.style.left=300; elemm.style.rotation=200; } 

Así es como llamo a esta function:

 <button onclick=add_img()>add image</button> 

Ahora la image se dibuja perfectamente dentro del browser. Pero cuando hago clic en la image, no recibo esa alerta.

.onclick debe establecerse en una function en lugar de una cadena. Tratar

 elemm.onclick = function() { alert('blah'); }; 

en lugar.

No estoy seguro, pero intenta:

 elemm.addEventListener('click', function(){ alert('blah');}, false); 

no puedes asignar un evento por cadena. Usa eso:

elemm.onclick = function () {alert ('blah'); };

Respuesta corta: desea configurar el controller para una function:

 elemm.onclick = function() { alert('blah'); }; 

Respuesta un poco más larga: deberá escribir algunas líneas más de código para que funcione de manera uniforme en todos los browseres.

El hecho es que incluso el código ligeramente más largo que podría resolver ese problema en particular a través de un set de browseres comunes aún tendrá sus propios problemas. Entonces, si no te importa el soporte de varios browseres, ve con el totalmente corto. Si te importa y solo quieres que funcione esta única cosa, ve con una combinación de addEventListener y attachEvent . Si desea poder crear objects de forma extensa y agregar y eliminar detectores de events a lo largo de su código, y quiere que eso funcione en todos los browseres, definitivamente desea delegar esa responsabilidad en una biblioteca como jQuery.

No creo que puedas hacer eso de esta manera. Deberías usar :

 void addEventListener( in DOMString type, in EventListener listener, in boolean useCapture ); 

Documentación aquí .

Tienes tres problemas diferentes. ¡Antes que nada, los valores en las tags HTML deberían ser citados! No hacer esto puede confundir el browser, y puede causar algunos problemas (aunque es probable que no sea el caso aquí). En segundo lugar, debe asignar una function a la variable onclick, como alguien más lo mencionó. No solo es esta la forma correcta de hacerlo en el futuro, sino que simplifica mucho las cosas si está intentando usar variables locales en la function onclick. Finalmente, puede probar addEventListener o jQuery, jQuery tiene la ventaja de una interfaz más agradable.

¡Ah, y asegúrate de que tu HTML valide! Eso podría ser un problema.

En caso de que no quiera escribir todo el código que escribió una vez en la function que llamó. Utilice el siguiente código, usando jQuery:

$ (elemento) .on ('clic', function () {add_img ();});