Pregunta

Información de fondo:
Tengo una función que cuando se llama crea una lista de selección dentro de un formulario y la llena. Después de eso, el script ejecuta las opciones de la lista y busca un determinado valor. Si el valor está allí, el script 'selecciona' esa opción.

Problema:
Debido a que la lista se crea de forma dinámica y algunas veces es muy grande, la carga tarda un poco. Cuando esto sucede, la segunda parte del script (la parte que selecciona una opción), no hace nada porque la lista de selección no ha tenido tiempo de cargar.

Idea para una solución:
Lo que sería bueno es llamar a la segunda parte de la función (como una función separada) en un evento onload para la lista de selección. Pero se supone que las listas de selección no tienen un atributo onload. La otra idea es simplemente agregar un retraso, pero un día el retraso puede no ser lo suficientemente largo.

Gracias de antemano por cualquier ayuda

¿Fue útil?

Solución 4

Ok, finalmente he solucionado el problema. La solución fue completamente diferente a lo que se discutió aquí. Básicamente, estaba usando 'nueva opción (valor, texto)' para agregar opciones a mi lista. Terminé lanzando una sentencia if y cuando un valor es igual a lo que necesitaba, se usa una nueva opción (value, text, true). Y eso solucionó el problema. Todo en un día de trabajo.

Otros consejos

El uso de un retraso no es confiable. Independientemente de lo que esté utilizando para completar la lista de selección, debe llamar a la función directamente cuando haya terminado.

alternativamente:

Dado que no hay " onload " evento para seleccionar todo lo que realmente puede hacer, tiene una función que se llama a sí misma después de un tiempo de espera. Si la longitud de los elementos en la lista de selección ha cambiado de cero, sabe que algo está agregando elementos actualmente (el punto de inicio). Si se ha alcanzado el punto de inicio y no ha cambiado nada después del siguiente tiempo de espera, puede suponer que los elementos han dejado de agregarse a la lista, por lo que puede ejecutar la segunda función.

¿Cómo estás haciendo tu llamada AJAX? La mayoría de las bibliotecas AJAX proporcionarán el mecanismo para realizar una devolución de llamada en caso de finalización exitosa. Por ejemplo en jQuery:

$("#myList").load("ajax.url", function(){
   //your content has been loaded, so you can do your selection logic here
});

Si está manejando la respuesta ajax manualmente & amp; construyendo su lista en javascript, entonces ya tiene un código que sabe cuándo está terminada la lista, así que solo puede hacer la parte de selección una vez que haya terminado en lugar de hacerlo como una función separada (como ha sugerido zyeming).

Si eso no te ayuda, podría valer la pena publicar algún código para que las personas puedan darte una respuesta más específica.

¿Por qué no hace que la función que selecciona la opción sea una función de devolución de llamada? Se llamará al final de la función que crea la lista. Por ejemplo,

function createList(onComplete) {
// Create the list and maybe other tasks
onComplete();
}

Nota: puede que no sea así, pero creo que tienes la idea ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top