jQuery .keyPress () - Как получить значение ввода, который вызвал событие? - PullRequest
5 голосов
/ 09 августа 2010

Попытка выполнить некоторую проверку jQuery (без плагина - пожалуйста, не отвечайте, например, "Просто используйте плагин validate-js").

Я подключаю обработчик событий на стороне клиента нажатие клавиши для каждого «обязательного поля» в готовом документе:

$(document).ready(function() {
  $('#myform input.required').each(function() {
    $(this).keypress(onRequiredFieldKeyPress);
  });
});

, который корректно запускает это событие при каждом нажатии клавиши:

function onRequiredFieldKeyPress() {
   if ($(this).val().trim() == '') {
      $(this).next('em').html('*').show(); // show req field indicator
   } else {
      $(this).next('em').html('*').hide(); // hide req field indicator
   }
}

Но $ (this) .val ()всегда ноль / пусто.Похоже, он переходит в «HTMLInputElement», что я и ожидал, но почти как будто мне нужно спроектировать это в какой-то другой тип jQuery?

По сути я пытаюсьсделать это: на событии нажатия клавиши любого поля, которое у меня есть (все элементы ввода), вызвать эту функцию.В этой функции, если это поле имеет значение '' (пустое), тогда покажите скрытое поле, в котором отображается обязательный индикатор поля.

Мне все равно , какой фактический элементЯ нажал клавишу, так как поведение моей логики будет таким же.Мне просто нужно получить фактическое значение.

Я что-то упустил?

Ответы [ 2 ]

9 голосов
/ 09 августа 2010

Потому что вы используете событие нажатия клавиши. Нажатие клавиши имеет 3 фазы:
1. Клавиша: когда нажата клавиша
2. Клавиша удерживается: клавиша удерживается
3. Ключ вверх: ключ отпущен
В вашем случае проблему можно решить с помощью события keyup

$(document).ready(function() {
  $('#myform input.required').each(function() {
    $(this).keyup(onRequiredFieldKeyPress);
  });
});
1 голос
/ 09 августа 2010

Попробуйте использовать event.currentTarget, где событие - это первый параметр вашей функции.

Смотрите здесь: http://api.jquery.com/event.currentTarget

...