2010-06-09 20 views
6

Estoy creando un botón dinámicamente usando JavaScript y al mismo tiempo asignando atributos como 'ID', 'tipo', etc. y también 'onclick' para activar una función.¿Cómo se asigna un atributo JavaScript 'onclick' dinámicamente?

Todo funciona bien aparte de la asignación del 'onclick'. Cuando se presiona, el botón no activa la función como se supone que debe hacerlo. la función que intento ejecutar es 'navegar (-1)' como se ve a continuación.

¿Dónde me estoy equivocando?

Aquí está mi código:

function loadNavigation() { 
var backButton; 
backButton = document.createElement('input'); 
backButton.ID = 'backButton'; 
backButton.type = 'button'; 
backButton.value='Back'; 
backButton.onclick = 'navigate(-1)'; 
document.body.appendChild(backButton); 
} 
+1

Una vieja pregunta, pero esto es necesario decir: ya no se asigna OnClick;) utilice button.addEventListener ('clic', función) en lugar. – AxelH

+0

@AxelH ¿Cuál es la razón para usar 'addEventListener' sobre' onclick'? –

+1

Onclick es un atributo antiguo para vincular una función a un evento. AddEventListener utiliza una colección para almacenar las funciones de cada evento, lo que significa que puede agregar tantas funciones como desee para un evento. Esto puede evitar el comportamiento inesperado si tiene algunas funcionalidades de configuración de scripts que pueden anular otras funcionalidades. Onclick es útil para el código de depuración rápida, pero en producción, no lo usaría. – AxelH

Respuesta

18

Como el otro dijo que debe asignar una función.

Sólo quería señalar que en este caso se desea pasar un valor por lo que necesita para asignar una función anónima (o una línea definida función llamada) como

button.onclick = function() {otherfunction(parameter)}; 

Si la función que desea asignar no requiere un parámetro que se puede utilizar directamente

button.onclick = otherfunction; 

Tenga en cuenta que no hay paréntesis en este caso

button.onclick = otherfunction(); // this doesn't work 

no funcionará, ya que se llamará otherfunction tan pronto como se analiza

4

va a asignar texto a la onclick, intente asignar una función.

backButton.onclick = function(){navigate(-1);}; 
1

Utilice una función en lugar de una cadena. Por ejemplo,

backButton.onclick = function() { navigate(-1); }; 
2

Tiene que asignar una función, no una cadena.

backButton.onclick = function wastefulDuplicationOfBackButton() { 
    navigate(-1); 
} 
+0

+1 para el nombre de la función – jessegavin

+0

@jessegavin, bueno, en IE terminas con * dos * objetos de función debido a un error serio en la implementación de JScript de [Expresiones de funciones nombradas] (http://yura.thinkweb2.com/named- function-expressions /), algo que no está tan bien: (... – CMS

+0

Va a demostrar que puedes hacer esto durante años y aún así aprender cosas nuevas ... en su mayoría nuevos problemas con IE, ¡pero nuevas cosas, no obstante! – Quentin

1

Debe asignar una función, no es una cadena:

//... 
backButton.onclick = function() { 
    navigate(-1); 
}; 
//... 
0
backButton.onclick = function() { navigate(-1); } 
Cuestiones relacionadas