jquery - Событие смены триггера()при установке значения<select>с помощью функции val()




events triggers onchange (5)

Самый простой и лучший способ инициировать событие изменения при установке значения элемента select .

Я ожидал, что выполнение следующего кода

$('select#some').val(10);

или

$('select#some').attr('value',  10);

приведет к запуску события изменения, которое, я думаю, довольно логично. Правильно?

Ну, это не так. Вам нужно событие triger change (), выполнив это

$('select#some').val(10).change();

или

$('select#some').val(10).trigger('change');

но я ищу какое-то решение, которое вызовет событие изменения, как только значение select изменится на некоторый код javascript.


Answers

У меня была очень похожая проблема, и я не совсем уверен, с чем вы столкнулись, так как ваш предлагаемый код отлично работал для меня. Он немедленно (ваше требование) вызывает следующий код изменения.

$('#selectField').change(function(){
    if($('#selectField').val() == 'N'){
        $('#secondaryInput').hide();
    } else {
        $('#secondaryInput').show();
}
});

Затем я беру значение из базы данных (это используется для формы как для ввода, так и для редактирования существующих записей), установите его как выбранное значение и добавьте элемент, который мне не хватало, чтобы вызвать приведенный выше код ».change () ».

$('#selectField').val(valueFromDatabase).change();

Таким образом, если существующее значение из базы данных «N», оно сразу скрывает вторичное поле ввода в моей форме.


Одна вещь, которую я узнал (трудный путь), заключается в том, что вы должны иметь

$('#selectField').change(function(){
  // some content ...
});

определенных до того, как вы используете

$('#selectField').val(10).trigger('change');

или

 $('#selectField').val(10).change();

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

$("#selectField").change(function(){
  if(this.value === 'textValue1'){ $(".contentClass1").fadeIn(); }
  if(this.value === 'textValue2'){ $(".contentclass2").fadeIn(); }
});

Прямой ответ уже повторяется: почему событие jquery change не запускается, когда я устанавливаю значение select с помощью val ()?

Как вы, вероятно, знаете, что значение параметра select не вызывает событие change (), если вы ищете событие, которое запускается, когда значение элемента было изменено через JS, нет ни одного.

Если вы действительно хотите это сделать, я думаю, что единственный способ - написать функцию, которая проверяет DOM на интервале и отслеживает измененные значения, но определенно не делайте этого, если вы не должны (не знаете, почему вам когда-либо понадобится)

Добавлено это решение:
Другим возможным решением было бы создать вашу собственную .val() обертки .val() и заставить ее запускать настраиваемое событие после установки значения через .val() , а затем, когда вы используете оболочку .val (), чтобы установить значение a <select> это вызовет ваше пользовательское событие, которое вы можете захватить и обработать.

Обязательно return this , поэтому он можно подключить в режиме jQuery


Вам нужно связать метод следующим образом:

$('#input').val('test').change();






jquery events triggers onchange