2010-07-14 9 views
6

Tengo el siguiente código JavaScript:JavaScript argumentos de controlador de eventos

var ans_el = document.createElement('input'); 
ans_el.setAttribute('id', unique_int_value); 
ans_el.setAttribute('type', 'radio'); 
ans_el.setAttribute('name', 'group'); 
ans_el.setAttribute('value', 'myValue'); 
ans_el.onclick = myFunction(this.id, this.value); 

// Add ans_el to DOM. 

function myFunction(index, value) { // do something } 

Esto, por supuesto, no funciona como se esperaba. Al menos no en Firefox 3.6. Lo que ocurre es que el evento onclick se activa cuando se crea el elemento y los argumentos pasados ​​a myFunction son nulos. Después de agregar el elemento al DOM, el evento onclick no se activa cuando se selecciona el botón de opción.

Estaría agradecido si alguien tiene alguna idea de lo que está sucediendo aquí, y/o la forma dinámica de agregar controladores de eventos se puede lograr.

Respuesta

11

Debe dar una referencia a una función para onclick; Actualmente está ejecutando la función y asignando ese resultado al controlador onclick. Esto está más cerca de lo que quiere:

ans_el.onclick = function(e) { 
    myFunction(ans_el.id, ans_el.value); 
}; 

ACTUALIZADO: decidido utilizar event.target para un ejemplo más claro desde Andir lo mencionó.

ans_el.onclick = function(e) { 
    myFunction(e.target.id, e.target.value); 
}; 
+5

también puede obtener la identificación/valor del objeto e.target. (e.target.id ...) – Andir

+0

Gracias por la respuesta rápida. Hice algo similar que parece funcionar: ans_el.setAttribute ('onclick', 'myFunc (this.id, this.value)'); Solo he probado esto en FF, estoy seguro de que Internet Explorer requerirá prodigiosos saltos en bastidor para lograr lo mismo. Estoy muy tentado de decirle a mis usuarios que I.E. no será compatible. – Bruce

+0

Eso funcionará, pero el uso de cadenas de código js para ser evaluado() ed así es generalmente desaprobado. Suele ser lento, con errores, y presenta una serie de problemas de seguridad. Ver http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil/198031#198031 – sunetos

Cuestiones relacionadas