2009-12-18 9 views
6

Tengo un objeto de cuadro de selección y una función ajax se llama OnChange usando el valor seleccionado como entrada. También quiero llamar a la misma función cuando el cuadro de selección se carga por primera vez. Yo uso jQuery .load, pero se llama a la función ajax antes de que se carguen las opciones y la entrada a mi función ajax no está definida. ¿Alguien sabe cómo hacer que jQuery espere a que se carguen todas las opciones antes de llamar a la función?jQuery espere a que se carguen todas las opciones de seleccionar

Gracias.

Editar - Agregar código he encontrado que un setTimeout() funciona bastante bien para retrasar la función. Sin embargo, me pongo nervioso usando setTimeout() porque si la página se carga más despacio de lo normal, no funcionará. He intentado reemplazar el tiempo de espera con $(document).ready como sugirió, pero la función todavía se llamó antes de que se seleccionara una opción y la entrada no estaba definida.

Aquí está el código:

<script type="text/JavaScript">  
    setTimeout('AjaxFunction($("#SelectID option:selected").val()));', 400); 
</script> 

<select id="SelectID" name="SelectName" onchange="AjaxFunction(this.value);"> 
<option value='Inland Empire'>Inland Empire</option> 
<option value='San Bernardino'>San Bernardino</option> 
<option value='Riverside'>Riverside</option> 
<option value='California'>California</option> 
</select> 
+0

Brian, debe proporcionar más información sobre cómo se cargan las opciones de selección. Derivado de uno de sus comentarios a continuación, se realiza a través de ajax. –

+0

¿Están el '

9

puedo mostrar algo de código que tiene hasta ahora? El uso de la función ready() de jQuery debe lograr lo que desea. Básicamente, espera que se cargue todo el DOM antes de que se ejecute.

$(document).ready(function(){ 
    //code here runs after the DOM is created 
}); 
+1

No creo que esto funcione para OP: parece que están cargando '

3

si utiliza jquery.load para cargar por primera vez el contenido de la caja de selección del primer tim E A continuación, se debe utilizar el parámetro de devolución de llamada de la función de carga añadir su ajaxFunction ..

así ..

siempre/siempre se llama a la función de carga hacerlo de esta manera

$("some_selector_where_you_load_the_select_box") 
.load("somepage.htm", 
     function(){ AjaxFunction($("#SelectID option:selected").val()); } 
    ); 

También vez de llamar al AjaxFunction usted mismo, puede activar el evento de cambio y dejar que el cuadro de selección maneje el AjaxFunction por sí mismo ... (útil si lo hace con varios cuadros de selección)

que sería

$("some_selector_where_you_load_the_select_box") 
.load("somepage.htm", 
     function(){ $("#SelectID").change(); } 
    ); 
+1

+1 para cambio() y para usar devolución de llamada con carga(). Supongo que es la solución correcta ya que las opciones de selección se están cargando con ajax. –

1

La mejor manera de lograr esto es retrasar el ajuste de la sobre el cambio de gatillo del seleccionar y dinámicamente decirle qué hacer en el cambio. Para que se active tan pronto como solo utilices la función change().Así que aquí está lo que se vería:

$(document).ready(function(){ 

    //At this point the select should be fully built, dynamically add the on change handler. 

    $('#SelectID').change(AjaxFunction); 

    //Fire the change event immediately. 

    $('#SelectID').change(); 
}); 
Cuestiones relacionadas