JQuery: как вызвать событие, когда пользователь очищает текстовое поле
У меня есть функция, которая в настоящее время работает над событием .keypress, когда пользователь правильно что-то в текстовом поле выполняет какой-то код, но я хочу, чтобы одно и то же событие запускалось также, когда пользователь очищал текстовое поле. он запускается после того, как пользователь меняет фокус на что-то еще.
Спасибо
Ответы
Ответ 1
Событие keyup
обнаружит, удалил ли пользователь также поле (backspace), но backspace не вызывает событие keypress
в IE)
$("#inputname").keyup(function() {
if (!this.value) {
alert('The box is empty');
}
});
jsFiddle
Как говорит Джош, это срабатывает для каждого символьного кода, который нажимается на вход. Это в основном просто показывает, что вам нужно использовать событие keyup для запуска backspace, а не для события keypress
, которое вы в настоящее время используете.
Ответ 2
Решение Jonathon Bolster не распространяется на все случаи. Я адаптировал его, чтобы также покрывать модификации путем резки и склеивания:
$("#inputname").on('change keyup copy paste cut', function() {
//!this.value ...
});
см. http://jsfiddle.net/gonfidentschal/XxLq2/
К сожалению, невозможно обнаружить случаи, когда значение поля задано с помощью javascript. Если вы сами установили значение, это не проблема, потому что вы знаете, когда вы это делаете... но когда вы используете библиотеку, такую как AngularJS, которая обновляет представление при изменении состояния, тогда это может быть немного больше. Или вы должны использовать таймер для проверки значения.
Также см. ответ Обнаружение изменения ввода в jQuery?, в котором предлагается событие ввода, понятное для современных браузеров. Так просто:
$("#inputname").on('input', function() {
//!this.value ...
});
Ответ 3
Другим способом, который делает это в сжатом виде, является прослушивание события "ввода" в текстовом поле text-type/input-type: text
/**
* Listens on textarea input.
* Considers: undo, cut, paste, backspc, keyboard input, etc
*/
$("#myContainer").on("input", "textarea", function() {
if (!this.value) {
}
});
Ответ 4
Внутри функции .keypress или .keyup, проверьте, не пусто ли значение ввода. Например:
$("#some-input").keyup(function(){
if($(this).val() == "") {
// input is cleared
}
});
<input type="text" id="some-input" />