El objetivo¿Cómo pasar una variable por valor a una función anónima de JavaScript?
quiero asignar dinámicamente controladores de eventos a algunos divs en las páginas a través de un sitio.
mi método
Im usando jQuery para unirse funciones anónimas como manejadores de eventos div seleccionados.
El problema
El código itera una matriz de nombres DIV y URL asociadas. El nombre div se utiliza para establecer el destino obligatorio, es decir, adjuntar este controlador de eventos a este evento div.
Mientras que los controladores de eventos se unen con éxito a cada uno de los eventos div, las acciones activadas por esos controladores de eventos solo se dirigen al último elemento de la matriz.
Así que la idea es que si el usuario pasa sobre un div dado, debería ejecutar una animación deslizable para ese div. Pero, en cambio, al pasar el mouse sobre div1 (rangeTabAll) se activa una animación deslizable para div4 (rangeTabThm). Lo mismo es cierto para divs 2, 3, etc. El orden no es importante. Cambie los elementos de la matriz y los eventos siempre apuntarán al último elemento de la matriz, div4.
Mi Código - (utiliza jQuery)
var curTab, curDiv;
var inlineRangeNavUrls=[['rangeTabAll','range_all.html'],['rangeTabRem','range_remedial.html'],
['rangeTabGym','range_gym.html'],['rangeTabThm','range_thermal.html']];
for (var i=0;i<inlineRangeNavUrls.length;i++)
{
curTab=(inlineRangeNavUrls[i][0]).toString();
curDiv='#' + curTab;
if ($(curDiv).length)
{
$(curDiv).bind("mouseover", function(){showHideRangeSlidingTabs(curTab, true);});
$(curDiv).bind("mouseout", function(){showHideRangeSlidingTabs(curTab, false);});
}
}
mi teoría
estoy bien no ver un error de sintaxis o salta a la vista es un problema pase por referencia. Inicialmente tuve la siguiente instrucción para establecer el valor de curTab:
curTab=inlineRangeNavUrls[i][0];
Así que cuando ocurrió el problema que me imaginé que, como he cambiado (a través de iteración del bucle) la referencia a curTab, yo estaba en el hecho de cambiar la referencia para todos los manejadores de eventos de función anónima previos al nuevo valor de curTab también ... y es por eso que los manejadores de eventos siempre se enfocaron en el último div.
Así que lo que realmente tenía que hacer era pasar el valor curTab a los controladores de eventos función anónima no es el objeto curTab referencia.
así que pensé:
curTab=(inlineRangeNavUrls[i][0]).toString();
podría solucionar el problema, pero no es así. El mismo trato. Así que claramente me falta algo de conocimiento clave, y probablemente muy básico, sobre el problema. Gracias.
JavaScript siempre pasa y lo asigna por valor. Su pregunta no se trata de aprobar en absoluto; sino más bien con la captura de variables por cierres. – newacct