запуск функции изменения jQuery при готовности документа - PullRequest
19 голосов
/ 17 мая 2011

Моя функция изменения позволяет пользователям переключаться из страны в страну и получать различный текст и функции.Работает при изменении выбора страны.Но при начальной загрузке страницы он не запускает изменения jQuery для установки скрытия и показа текстовых элементов div для страны по умолчанию / начальной страны.

Оба div-а отображаются при начальной загрузке страницы.Когда я перехожу, а затем возвращаюсь в страну по умолчанию / начальную страну, меняю огонь, прячу и показываю огонь, и показываю правильную информацию и функции.

Я пробовал document.ready с функцией изменения как внутри переключателей, так и вне функции изменения.Ни то, ни другое не работает - они не запускают прятки, показы и другие jQuery в коммутаторах в doc ready.Мне не ясно, является ли «готово» допустимым триггерным событием.

Я также пытался:

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

, но это нарушило функцию изменения.Вот кодВыбор страны ниже - всего 2 страны, чтобы упростить ее, но на самом деле их много.

$(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;         
    }
});
});

Ответы [ 4 ]

33 голосов
/ 17 мая 2011

Просто цепочка .trigger('change') до конца назначения обработчика.

 // ----------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

Или, если вы хотите, чтобы он срабатывал только на первом элементе, используйте triggerHandler() вместо.

        // ...
        $('#twoSelects').show();
        $('#threeSelects').hide();
        //select town via 2 steps - country, town           
        break;         
    }
}).triggerHandler('change');  // <--- RIGHT HERE
2 голосов
/ 17 мая 2011

Почему бы просто не вызвать change после выбора соответствующих переключателей?

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

Это эквивалентно

$('input[name=country]').trigger('change');
0 голосов
/ 17 мая 2011

Обычно это делается как:

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.
0 голосов
/ 17 мая 2011

Перед финалом}) ;, добавьте $ ('input'). Change ();

...