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

JQuery: как вызвать событие, когда пользователь очищает текстовое поле

У меня есть функция, которая в настоящее время работает над событием .keypress, когда пользователь правильно что-то в текстовом поле выполняет какой-то код, но я хочу, чтобы одно и то же событие запускалось также, когда пользователь очищал текстовое поле. он запускается после того, как пользователь меняет фокус на что-то еще.

Спасибо

4b9b3361

Ответ 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" />