Подтвердить что ты не робот

Изменение значения текстового поля 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

Спасибо

4b9b3361

Ответ 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);