2011-05-16 9 views
19

Mi función de cambio permite a los usuarios cambiar de país a país y obtener texto y funciones diferentes. Funciona al cambiar las selecciones de país. Pero en la carga de la página inicial, no se activa el cambio de jQuery para establecer el ocultar y mostrar los div de texto para el país predeterminado/inicial.activando una función de cambio jQuery al documento listo

Ambos divs se muestran en la carga de la página inicial. Cuando me cambio y vuelvo al país predeterminado/inicial, modifico fuegos, oculto y veo fuego, y muestro la información y las características adecuadas.

He intentado document.ready con una función de cambio dentro de las selecciones del interruptor y fuera de la función de cambio. Ninguno de los dos trabaja: no encienden el hide, el show y otros jQuery en los conmutadores en doc ready. No tengo claro si 'listo' es un evento desencadenante válido.

también he intentado:

$('input[name=country]').value('US').trigger('click'); 

pero se rompió la función de cambio. Aquí está el código. La selección de país a continuación es solo 2 países para mantenerlo simple, pero en realidad, hay muchos.

$(document).ready(function() 
{ 
//1st tier - select country via radio buttons:   
//Initialize country 
$('input[name=country]:first').attr('checked', true); //Set first radio button (United States) 
//$('input[name=country]:first').attr('checked', true).trigger('ready'); //sets 1st button, but does not fire change 
//$('input[name=country]:first').trigger('click'); //sets 1st button, but does not fire change 

$('input[name=country]').change(function() 
{                    
// change user instructions to be country specific 
    switch ($('input[name=country]:checked').val()) 
    { 
     case 'US': 
     $('#stateMessage1').text('2. Select a state or territory of the United States.'); 
     $('#stateMessage2').text('Start typing a state of the United States, then click on it in the dropdown box.'); 
     $('#threeSelects').show(); 
     $('#twoSelects').hide(); 
     //select via 3 steps       
     break;   
     case 'CA': 
     $('#stateMessage1').text('2. Select a province or territory of Canada.'); 
     $('#stateMessage2').text('Start typing a province of Canada, then click on it in the dropdown box.'); 
     $('#twoSelects').show(); 
     $('#threeSelects').hide(); 
     //select town via 2 steps - country, town   
     break;   
    } 
}); 
}); 

Respuesta

32

Solo cadena .trigger('change') hasta el final de la asignación del controlador.

// ----------v-------v-----quotation marks are mandatory 
$('input[name="country"]').change(function() 
{                    
// change user instructions to be country specific 
    switch ($('input[name="country"]:checked').val()) 
    { 
     case 'US': 
     $('#stateMessage1').text('2. Select a state or territory of the United States.'); 
     $('#stateMessage2').text('Start typing a state of the United States, then click on it in the dropdown box.'); 
     $('#threeSelects').show(); 
     $('#twoSelects').hide(); 
     //select via 3 steps       
     break;   
     case 'CA': 
     $('#stateMessage1').text('2. Select a province or territory of Canada.'); 
     $('#stateMessage2').text('Start typing a province of Canada, then click on it in the dropdown box.'); 
     $('#twoSelects').show(); 
     $('#threeSelects').hide(); 
     //select town via 2 steps - country, town   
     break;   
    } 
}).trigger('change'); // <--- RIGHT HERE 

o si sólo quiere que se disparó en el primer elemento, utilice triggerHandler() lugar.

 // ... 
     $('#twoSelects').show(); 
     $('#threeSelects').hide(); 
     //select town via 2 steps - country, town   
     break;   
    } 
}).triggerHandler('change'); // <--- RIGHT HERE 
+0

Esto funciona. Gracias. Se repite 25 veces. ¿Hay otra forma de hacerlo que no funcione en bucle, o estoy siendo exigente ;-) Quiero que active toda la función de cambio porque cualquiera de muchos países podría ser la condición inicial, por lo que triggerHandler en el primero no lo es? . –

+3

@Mike_Laird: si dices que solo quieres que se active para el marcado, haz lo siguiente: '.filter (': checked'). Trigger ('change');' – user113716

+0

¡Lo has conseguido! increíble. Cambie los incendios solo una vez en la carga y una vez por cada cambio individual a partir de entonces. Mostrar, ocultar, etc. hacer sus cosas correctamente. Muchas gracias. –

2

¿Por qué no desencadenar change Después de seleccionar el botón de selección apropiado?

$('input[name=country]').change(); 

Esto es equivalente a

$('input[name=country]').trigger('change'); 
+0

Esto no se dispara la función de cambio. Mostrar y ocultar no ejecutar. –

+0

Sí, todas las demás respuestas de la página hacen lo mismo. Debe haber algo más que esté causando que no funcione, tal vez donde colocó la llamada de activación. –

0

Antes del final}) ;, añadir en $ (cambio de 'entrada') (.);

+0

Esto funciona. Gracias. Se repite 25 veces en la carga de la página inicial. ¿Hay otra forma de hacerlo que no funcione en bucle? ¿O estoy siendo exigente? Después de los cambios en un país, se ejecuta solo una vez. Entonces, en términos de comportamiento, actúa igual que la sugerencia patrick dw anterior. –

0

Esto generalmente se hace como:

function onChange() 
{                    
    switch ($('input[name=country]:checked').val()) 
    .... 
} 

$('input[name=country]').change(onChange); // 1. attach it as event handler. 
onChange();        // 2. call it first time. 
+1

Es posible que tenga algo aquí, pero soy un principiante y no pude hacer que su sugerencia funcione. La página no se cargará. Las instrucciones son muy escuetas. Si le interesa expandir la sugerencia a más detalles de implementación, lo intentaré de nuevo. –

Cuestiones relacionadas