consideran este pequeño fragmento de JavaScript:¿Cómo puedo evitar los cierres de Javascript?
for(var i in map.maps)
{
buttons.push($("<button>").html(i).click(function() { alert(i); }));
}
Se crea un botón para cada uno de los campos del objeto map.maps
(Es una matriz asociativa). Establecí el índice como el texto del botón y lo configuré para alertar también al índice. Obviamente, uno esperaría que todos los botones alertaran su propio texto cuando se hace clic, pero en su lugar todos los botones alertan al texto del índice final en el objeto map.maps
al hacer clic.
Supongo que este comportamiento es causado por la forma clara en que JavaScript maneja los cierres, retrocede y ejecuta funciones desde los cierres en los que fueron creados.
La única forma en que me puedo imaginar para solucionar esto es establecer el índice como datos en el objeto de botón y usarlo desde la devolución de llamada de clic. También podría imitar los índices map.maps
en mi objeto buttons
y encontrar el índice correcto al hacer clic usando indexOf
, pero prefiero el anterior.
Lo que estoy buscando en las respuestas es la confirmación de que lo estoy haciendo de la manera correcta, o una sugerencia sobre cómo debo hacerlo.
Duplicación casi exacta de [¿Cómo paso el valor (no la referencia) de una variable JS a una función?] (Http://stackoverflow.com/questions/2568966/how-do-i-pass-the -value-not-the-reference-of-a-js-variable-to-a-function) –