Изменение значения текстового поля jQuery не зависит от пользователя
Скажем, у вас есть простая текстовая рамка и кнопка на вашей странице. Нажатие на кнопку обновит значение текстового поля:
HTML:
<input type="text" id="myText" val="" />
<input type="button" id="myBtn" value="Change TextBox Value" />
jQuery:
$("#myBtn").on('click', function() {
$("#myText").val('adsf');
})
Я хотел бы добавить прослушиватель событий для события изменения текстового поля, например:
$('#myText').on('change', function(){
alert('Changed!')
});
Это предупреждение не запускается, когда вы нажимаете кнопку, но запускается, когда вы вручную изменяете значение текстового поля и фокусируете его.
Я знаю, что вы можете добавить $("#myText").trigger('change')
к событию onclick, но я хочу только выполнить это, добавив прослушиватель событий в текстовое поле.
jsfiddle
Спасибо
Ответы
Ответ 1
Нет такого события. Единственное, что вы можете попробовать, - установить интервал или таймаут, чтобы проверить, было ли изменено значение (используя данные для хранения временного значения):
var $myText = $("#myText");
$myText.data("value", $myText.val());
setInterval(function() {
var data = $myText.data("value"),
val = $myText.val();
if (data !== val) {
$myText.data("value", val);
alert("changed");
}
}, 100);
DEMO: http://jsfiddle.net/xZcAr/1/
Ответ 2
Почему бы не форсировать ручное событие, когда кнопка нажата так -
$('#myText').on('change, blur',function(e){
alert('Changed!');
});
$("#myBtn").on('click', function() {
$("#myText").val('adsf');
$("#myText").blur();
})
Ответ 3
Вам нужно просто использовать функцию keyup
:
$( "#myText").keyup(function(){
alert($(this).val());
});
Ответ 4
Вам нужно будет подключить оба обработчика. Чтобы повторно использовать обработчик, вы можете извлечь его для именованной функции:
function showChanged(){
alert('Changed!')
}
$("#myBtn").on('click', showChanged);
$("#myText").on('change', showChanged);