jquery change() не работает, если значение изменено с помощью jQuery

#jquery

#jquery

Вопрос:

У меня есть поле ввода текста, которое я сделал доступным только для чтения, поэтому пользователь не может вводить в него. Однако я обновляю его значение с помощью jquery. Итак, в основном я хочу, чтобы событие срабатывало при изменении его значения с помощью jQuery. Ниже приведен пример разметки ввода и разметки jquery.

 <input type="text" readonly="readonly" id="textinput" />

$('#textinput').change(function() {
    alert("It's Changed!");
});
 

Комментарии:

1. Я не верю, что такое событие существует, поскольку разумно предположить, что программист знает, когда он меняет DOM, и может одновременно явно вызывать функцию.

Ответ №1:

Вы не сможете этого сделать. Изменения, внесенные с помощью кода, не запускают события. Вы можете просто вызвать change непосредственно в своем коде.

Что-то вроде этого:

 // do stuff
$('#textinput').val("something").change();
 

Комментарии:

1. это должно быть выбрано как правильный ответ. также … следует отметить, что каждый сценарий JQ, который включает в себя настройку / изменение .val(), всегда должен привязываться к .val().change(), чтобы событие могло всплывать только для готовых и / или скрытых элементов.

Ответ №2:

Я думаю, что событие ‘change’ срабатывает только тогда, когда текстовое поле теряет фокус. Итак, после изменения значения в вашем коде вам нужно будет сделать —

 $('#textinput').trigger('change')
 

Демонстрация — http://jsfiddle.net/upS2x/1 /

Ответ №3:

Поскольку это ввод только для чтения, вы не можете ввести его, поэтому change, keyup, keydown и keypress не будут работать в отношении этого ввода.

При этом вы должны применить событие к функции, которая изменяет входной текст. Поэтому, если input1 изменяет текст в textinput:

 $("#input1").keyup(function(){
    $("#textinput").val($(this).val());
});
 

Я надеюсь, что это поможет.