JQuery: триггер («изменение») против триггера («изменение.select2») - PullRequest
0 голосов
/ 10 октября 2018

У меня есть элемент select2 (#project_id).У меня также есть событие изменения этого элемента.

$(document).on('change', '#project_id', function () {
     //my code...
}

Событие изменения срабатывает только когда я использую следующее:

$("#project_id").html('<option value="' + res.project_id + '">' + res.project_name + ' [ ' + res.project_id + ' ]</option>');
$("#project_id").val(res.project_id).trigger('change');

Я хочу понять, почему событие изменения не происходиттриггер при использовании:

$("#project_id").html('<option value="' + res.project_id + '">' + res.project_name + ' [ ' + res.project_id + ' ]</option>');
$("#project_id").val(res.project_id).trigger('change.select2');

В обоих случаях опция select2 изменяется, но событие вызывается только в первом случае.

1 Ответ

0 голосов
/ 23 октября 2018

Событие change возникает, когда определенные элементы form меняют значение.Вы привязываете слушателя к этому событию и запускаете его явно.

Событие change.select2 является отдельным событием и не связано с элементами dom.В соответствии с документацией :

Обычно другие компоненты прослушивают событие изменения или подключают пользовательские обработчики событий, которые могут иметь побочные эффекты.Чтобы ограничить область действия до только , уведомить Select2 об изменении, используйте пространство имен события .select2

, чтобы оно никогда не достигало «реального» элемента select и, следовательно, вашего обработчика.не выполняется.

Вы можете копать в источник , чтобы увидеть, что он просто использует его для уведомления других select2 компонентов об обновлении их отображения и т. д.

...