Как проверить, является ли значение ввода текста пустым сразу после события нажатия клавиши в JavaScript? - PullRequest
2 голосов
/ 08 сентября 2010

Вот проблема, в абстрактных терминах: у меня есть три поля ввода (A, B, C).два из них должны быть текстовыми вводами (A и B), третий - несоответствующего типа.Мне нужно включить третий, если A не пусто, а B не пусто.Мне нужно отключить C, если A пусто или B пусто.

Код

// empty is the empty function from the phpjs project
// framework used: jQuery
// A, B and C are classes here

$(".A, .B").keypress(function(){
   if( !empty($(".A").val()) && !empty($(".B").val()) )
       $(".C").attr("disabled","");
   else
       $(".C").removeAttr("disabled");
});

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

Кто-нибудь сталкивался с этим раньше и решил его?

Ответы [ 6 ]

6 голосов
/ 08 сентября 2010

вы пробовали использовать событие keyUp?

2 голосов
/ 08 сентября 2010

Вместо этого используйте событие keyup.

1 голос
/ 08 сентября 2010

Присоедините ваш обработчик к событию keyrelease. Значение должно быть обновлено к тому времени.

0 голосов
/ 08 сентября 2010

используйте комбинацию обработчиков для keyup и change. обработчик keyup будет обновляться по мере того, как пользователь будет вводить (исключая крайние варианты, такие как удержание клавиши, что здесь не выглядит проблемой), а обработчик change будет ловить такие вещи, как пользователь, обрезающий текст действиями мыши перед они могут переключиться на поле C. В качестве дополнительной меры вы можете добавить проверку события focus поля C, чтобы убедиться, что у A и B действительно есть что-то.

0 голосов
/ 08 сентября 2010

При событии keypress значение INPUT еще не установлено. Следовательно, вы не можете легко узнать, пусто ли оно.

Пока срабатывает keyup, устанавливается значение INPUT.

Но все становится хуже. Пользователь может очистить поле с помощью мыши или меню «Правка» браузера. В этом случае keyup не срабатывает.

В нашем веб-приложении мы автоматически сохраняем значения.
Как и в Mac OS, кнопки сохранения практически отсутствуют.

Чтобы разрешить реакцию, это более или менее то, что мы делаем:

  1. onfocus: a setInterval начинает опрос каждые 120 мс или около того и проверяет ввод на наличие изменений
  2. если есть изменения, выполнить соответствующее действие
  3. onblur: a clearInterval прекратить опрос
0 голосов
/ 08 сентября 2010
    $('.A, .B').keydown(function(event) { 
    if(!empty($('.A').val()) && !empty($('.B').val()))
        $(".C").attr("disabled","");
    else
        $(".C").removeAttr("disabled");
    });
...