jQuery .keyPress() - 如何获取触发事件的输入值?

时间:2010-08-09 06:57:08

标签: javascript jquery html keypress onkeypress

尝试做一些jQuery验证(没有插件 - 请不要回答“只需使用validate-js插件”)。

我正在为doc ready上的每个“必填字段”连接一个客户端事件处理程序keypress

$(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()始终为null / empty。看起来它正在传递一个“HTMLInputElement”,这是我所期望的,但它几乎就像我必须投射到其他jQuery类型中?

基本上我正在尝试这样做:在我已连接的任何字段的按键事件(都是输入元素)上,调用该函数。在该函数中,如果该字段的值为''(空),则显示一个显示必填字段指示符的隐藏字段。

我并不关心哪个实际元素触发了按键,因为我的逻辑行为将是相同的。我只需要获得实际价值。

我错过了什么吗?

2 个答案:

答案 0 :(得分:9)

因为您正在使用按键事件。按键有3个阶段:
1.按键:按键时按键 2.按住键:按住键 3.按键:按键是释放
在您的情况下,可以通过使用keyup事件来解决问题

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

答案 1 :(得分:1)

尝试使用event.currentTarget,其中event是函数的第一个参数。

见这里:http://api.jquery.com/event.currentTarget