Событие изменения триггера <select> с помощью jquery


146

есть ли в любом случае я мог бы вызвать событие изменения в поле выбора при загрузке страницы и выбрать конкретный вариант.

Также функция выполняется путем добавления триггера после привязки функции к событию.

Я пытался вывести что-то вроде этого

<select class="check">
<option value="one">one</option>
<option value="two">two</option>
</select>

$(function(){
    $('.check').trigger('change'); //This event will fire the change event. 
    $('.check').change(function(){
      var data= $(this).val();
      alert(data);            
    });
});

http://jsfiddle.net/v7QWd/1/


Вы хотите установить конкретную опцию при загрузке? или вы хотите активировать событие изменения?
— Manse

Не могли бы вы расширить на окончательное решение. Пытаетесь ли вы принудительно включить параметр при загрузке страницы или выберите другой параметр, если выбрано что-то конкретное?
— Мэтью Рич

привет, спасибо за ваш отзыв, я смог решить проблему и задокументировал ее.
— Кишанио

Ответы:


288

Используйте val()для изменения значения (не текста) и trigger()для ручного запуска события.

Обработчик события изменения должен быть объявлен перед триггером.

Вот образец

$('.check').change(function(){
  var data= $(this).val();
  alert(data);            
});

$('.check')
    .val('two')
    .trigger('change');

Также после изменения опции я хотел выполнить функцию события изменения. по этому поводу . окно оповещения должно быть выполнено.
— Кишанио

@KishanThobhani вы должны назвать это после добавления обработчика. посмотрите образец.
— Джозеф

7
Важной частью этого решения является: обработчик события изменения ДОЛЖЕН быть объявлен ДО триггера (имеет смысл ...), в моем случае это была проблема, спасибо!
— Ларзан

Это помогло как Спасителю, Спасибо @Joseph
— Divya

определил функцию изменения ДО того, как ты используешь, решил мою проблему. Спасибо.
— Kamlesh

28

Чтобы выбрать опцию, используйте .val('value-of-the-option')элемент select. Чтобы активировать элемент изменения, используйте .change()или .trigger('change').

Проблемы в вашем коде - это запятая, а не точка внутри, $('.check'),trigger('change');и тот факт, что вы вызываете ее перед привязкой обработчика событий.


10
$('#edit_user_details').find('select').trigger('change');

Это изменит выпадающий элемент select html tag с помощью id="edit_user_details".


7

Другое рабочее решение для тех, кто был заблокирован с помощью обработчика триггера jQuery, которое запускает огонь на нативных событиях, будет как ниже (100% работает):

var sortBySelect = document.querySelector("select.your-class"); 
sortBySelect.value = "new value"; 
sortBySelect.dispatchEvent(new Event("change"));

1
Я перепробовал все вышеперечисленное, но у меня работает только этот. Я думаю, потому что мой выбор был внутри vue. Спасибо @ Мохаммед23gharbi!
— Тиллито

1
Тоже самое. Это решение, которое я искал в течение часа. Спасибо.
— mberna

1
Это должно быть ответом!
— МАРС

1

Дайте ссылки в значении тега option

<select size="1" name="links" onchange="window.location.href=this.value;">
   <option value="http://www.google.com">Google</option>
   <option value="http://www.yahoo.com">Yahoo</option>
</select>

1

Если вы хотите сделать некоторые проверки, используйте этот способ

 <select size="1" name="links" onchange="functionToTriggerClick(this.value)">
    <option value="">Select a Search Engine</option>        
    <option value="http://www.google.com">Google</option>
    <option value="http://www.yahoo.com">Yahoo</option>
</select>

<script>

   function functionToTriggerClick(link) {

     if(link != ''){
        window.location.href=link;
        }
    }  

</script>

0

Основываясь на ответе Мохамеда 23харби:

function change(selector, value) {
    var sortBySelect = document.querySelector(selector);
    sortBySelect.value = value;
    sortBySelect.dispatchEvent(new Event("change"));
}

function click(selector) {
    var sortBySelect = document.querySelector(selector);
    sortBySelect.dispatchEvent(new Event("click"));
}

function test() {
    change("select#MySelect", 19);
    click("button#MyButton");
    click("a#MyLink");
}

В моем случае, когда элементы были созданы vue, это единственный способ, который работает.


0

Вы можете попробовать код ниже, чтобы решить вашу проблему:

По умолчанию выбирается первая опция: jQuery ('. Select'). Find ('option') [0] .selected = true;

Спасибо, Кетан Т

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.