Hola.

On 1/29/07, Juan José Montes de Oca Arbós
<[EMAIL PROTECTED]> wrote:
> Hola Gente!!!!!
>
> Tengo una duda/problema... revisando y leyendo sobre javascript, encontré
> que si quiero asignarle una función a un evento dinamicamente, tengo que
> hacer algo como esto:
>
> function funcionHacerAlgo () {
>   alert ('Se ejecutó el OnClick.');
> }
>
> //En alguna parte del código, asigno al evento onClick del objeto en
> cuestión, la función anterior.
> var miObjeto = document.getElementById ('unControl');
> miObjeto.onclick = funcionHacerAlgo;
> //acá no hice miObjeto.onclick = funcionHacerAlgo (); , porque estoy
> asignando la funcion, no el resultado de la misma.
>
> y eso es equivalente a crear el objeto de esta forma:
> <img id="miObjeto" onclick="funcionHacerAlgo ();" />
>
> Y eso funciona... pero, yo quiero ejecutar una función con parámetros... ¿se
> puede? Si no lo quiero hacer dinamicamente, puedo escribir: <img
> id="miObjeto" onclick="funcionHacerAlgo ('param1', 'param2',
> 'param3');" />y eso anda... ¿como lo hago dinamicamente?

Verás, cuando usas el atributo HTML `onclick` [^1], el intérprete de
javascript  _crea_ una función anónima con el contenido de la cadena
como cuerpo.

Cuando utilizas, en javascript, `elemento.onclick` debes ser tú quien
cree la función. Tal que así:

## Manejador (usaremos el mismo)
function hacerAlgo(a, b, c) {
    alert( [ a, b, c ].join(", ") );
}

## Situación actual: `onclick` como atributo HTML
<button id="search" onclick="hacerAlgo('x', 'y', 'z');">Haz algo</button>

## Situación deseable: asignación mediante js (eliminamos el atributo HTML):
    HTML:
    <button id="search">Haz algo</button>
    JS:
    var el = document.getElementById("search");
    search.onclick = function() {
      hacerAlgo('a', 'b', 'c');
    };

Salud.

[^1]: Y cualquier otro atributo HTML relacionado con el manejo de eventos.
-- 
Choan
<http://choangalvez.nom.es/>
_______________________________________________
javaEScript mailing list
javaEScript@scriptia.net
http://lists.scriptia.net/listinfo.cgi/javaescript-scriptia.net

Responder a