Si no he entendido mal, tu problema es que la funcion a la que llama el
"onclick" debe tener referencias a los controles que van asociados a el.
Yo probaría una función que GENERE FUNCIONES ANONIMAS (closures), y que
admita como parametros los parametros que necesite tener la función del
onclick.
function generarFuncionAnonima (objeto, funcionOnClick, argumento1,
argumento2) {
return function(e) {
return funcionOnClick.call(obj, e, argumento1, argumento2);
}
}
// ahora genero el primer boton, y la primera closure.
boton1= [lo que uses para crear boton];
// crear los demas controles (referenciaAlControl1, referenciaAlControl2)
onClickBoton1 = generarFuncionAnonima(boton1, testclk,
referenciaAlControl1, referenciaAlControl2);
boton1.attachEvent("onclick", onClickBoton1);
// y el resto...
boton2= [lo que uses para crear boton];
onClickBoton2 = generarFuncionAnonima(boton2, testclk, referenciaAlControl3,
referenciaAlControl4);
// crear los demas controles (referenciaAlControl3, referenciaAlControl4)
boton2.attachEvent("onclick", onClickBoton2);
De esta forma, cuando se ejecuta la funcion testclk, tiene acceso a los
argumentos referenciaAlControl1, referenciaAlControl2.
Esta tecnica se usa en las librerias de eventos. Lógicamente requiere conocer
de antemano los parametros que quedarán "encerrados" en las llamadas a testclk.
Suerte.
Gonzalo López.
Fernando G.M. wrote
>Hola. Tengo un problema que no he conseguido resolver y no he visto
>nada parecido en los archivos de la lista. A ver que os parece.
>
>Tengo una aplicación web con un formulario bastante largo (que le
>vamos a hacer) en el que puedo introducir varios conjuntos de
>información del mismo tipo (llamemoslos, ejem, diagnosticos). Cada uno
>de estos 'diagnosticos' se compone de 3 campos: una descripción libre,
>un código normalizado, y una descripción normalizada.
>
>El usuario debe introducir como mínimo un diagnostico, y por lo tanto,
>en el formulario aparecen inicialmente 3 campos. Tambien puede
>introducir un numero variable de diagnosticos secundarios, y para eso,
>creo mediante DOM y a petición del usuario pulsando un botón, nuevos
>sets de 3 campos.
>
>El valor de los campos normalizados, tiene varios metodos de
>introducción. Una posibilidad es que el usuario teclee el código si lo
>conoce, y entonces al dejar el campo (onChange), cargo (en un iframe
>oculto, cosas del 'framework') el texto de la descripción normalizada
>y lo muestro en el campo adjunto a este. Otra posibilidad es un botón
>que despliega un popup que contiene la tabla completa de
>codigos-descripciones, donde el usuario selecciona el que desea, y
>este es copiado a los campos de la ventana padre.
>
>El problema es que en el momento en que tengo varios sets de
>diagnostico, necesito pasar parametros a las funciones javascript que
>estan asignadas a los eventos onChange (del campo código) y onClick
>(del botón que despliega el popup, que va incluido en el set de 3
>campos). Necesito una referencia que de algún modo me permita alcanzar
>los otros campos del mismo set en el que ha ocurrido el evento, y no
>sé como hacerlo.
>
>Hasta ahora, lo que hacía en el momento de crear los elementos era
>utilizar código del siguiente estilo:
>
> //t.attachEvent("onclick", testclk);
>ó
> t.onclick=testclk;
>
>donde t es una referencia al botón, y testclk el nombre de la función
>que quiero enlazar al evento onClick del botón, que ya tengo definida
>por ahi. El caso es que nunca había tenido que pasar parametros a las
>funciones enlazadas a eventos de elementos creados de este modo, y no
>encuentro la manera de hacerlo. Me serviría incluso definir una
>función anonima en lugar de indicar el nombre de una definida
>previamente, pero aun así, no doy con la manera de hacerlo.
>
>¿Alguien puede aconsejarme?.
>
>Si sirve de algo, el navegador en el que corre la aplicación es IE 6,
>aunque se agradecerá cualquier sugerencia, aunque solo funcione en
>Firefox, Opera4, Mosaic o lo que sea :D.
>Los consejos sobre dejar este negocio e irse a contemplar la vida al
>Himalaya tambien serán tenidos en cuenta.
>
>Un saludo a todos y gracias por adelantado.
>
>
_______________________________________________
javaEScript mailing list
[email protected]
http://lists.scriptia.net/listinfo.cgi/javaescript-scriptia.net