Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   обработка select по умолчанию (https://javascript.ru/forum/jquery/70985-obrabotka-select-po-umolchaniyu.html)

carder 16.10.2017 21:32

обработка select по умолчанию
 
есть select, в нем один пункт выбран по умолчанию.
Необходимо выполнить функцию как при первичной загрузке select так и при его изменении.
вижу себе это так:
HTML:
<div class="del_select" id="country_select">
            <label for="country">
                <select class="selectBlock" id="country">
				<option value="2">Армения</option>
				<option value="2">Беларусь</option>
				<option value="2">Казахстан</option>
				<option value="2">Киргизия</option>
				<option selected value="1">Россия</option>
                </select></label>
        </div>

JS:
$('#country').change();
			$('#country').change(function () {
				alert('ДА!');
			});

не работает. Но, если изменить порядок:
$('#country').change(function () {
				alert('ДА!');
			});
                        $('#country').change();

то работает! Чем можно объяснить?

P.s. запилил фидл https://jsfiddle.net/8s9now1t/ он вообще не обрабатывает $('#country').change()

laimas 16.10.2017 21:36

$('#country').change(function () {
                alert('ДА!');
}).trigger('change');

carder 16.10.2017 21:52

а почему это правильнее чем моя запись и как быть если необходимо выбрать из другого места?

и тут по прежнему почему-то не работает https://jsfiddle.net/8s9now1t/1/

рони 16.10.2017 22:06

Цитата:

Сообщение от carder
и тут по прежнему почему-то не работает

jQuery нет
нажмите там кнопку JavaScript => Frameworks & Extensions => jQuery

laimas 16.10.2017 23:17

Цитата:

Сообщение от carder
а почему это правильнее чем моя запись

Это $('#country').change установка обработчика списку, которую можно произвести только по событию загрузки документа, то есть единожды. А это $('#country').change(...).trigger('change') запуск установленного обработчика, который запустится после загрузки страницы.

Цитата:

Сообщение от carder
как быть если необходимо выбрать из другого места?


Что значит выбрать с другого места? Методом jQ .trigger(event) можно сколь угодно запускать ранее установленный обработчик.

carder 17.10.2017 00:09

не совсем так. По документации (http://api.jquery.com/change/):
вызов .change() - работает как триггер
вызов .change( обработчик ) - устанавливает обработчик.

единственный вопрос, который остался - вызвать обработчик можно только после того как он задан? Т.е.
$('#country').trigger('change'); //тут не должен работать
$('#country').change(function () {
				alert('ДА!');
			});
$('#country').trigger('change'); // а тут уже сработает


т.е. это ни как обращение к js функции?

laimas 17.10.2017 00:22

Цитата:

Сообщение от carder
вызвать обработчик можно только после того как он задан?

Да, а вам что-то иное разве нужно?

laimas 17.10.2017 08:08

А так, сначала:

$('#country').event(...);

а затем

$('#country').trigger(event);

это совсем плохо. Методы JQ возвращают объект полученный по селектору, что позволяет описать множество методов к объекту цепочкой. А то что вы делаете - это найти в DOM объект, выполнить, затем его же опять найти в DOM и выполнить еще что-то.

JQ позволяет это описать так:

$(selector).method(...).method(...).method(...)...

Можно одновременно и кешировать объект в дальнейшем используя его внутри методов.

Цитата:

Сообщение от carder
т.е. это ни как обращение к js функции?

Это вызов события и соответственно запуск ранее установленного на него обработчика. Выполнить обработчик события не вызывая самого события, это метод .triggerHandler().


Часовой пояс GMT +3, время: 12:12.