2012-04-18 83 views
-3

我有这样的:onkeypress事件文本框问题

<input type="text" ID="txtMy" name="txtMy" onkeypress="initialize();"/> 

而在我的js文件我有:

initialize() 
{ 
    var x = $("#txtMy").val(); 
} 

但是,如果我在文本框有 '2',然后我进入4 ,x的值仍然是2.如何解决这个问题?

+1

尝试用'onkeyup'代替 – MilkyWayJoe 2012-04-18 16:59:03

+2

使用内联属性来附加事件处理程序是不好的做法。如果你使用像jQuery这样的框架,那么真的没有理由这样做,因为它使整个绑定过程变得如此简单。 – 2012-04-18 17:00:11

回答

1

使用keyup

这里是你如何做到这一点的unobtrusive way

HTML

<input type="text" id="txtMy" /> 

脚本

$(function(){ 
    $("#txtMy").keyup(function (event) { 
    alert($(this).val()) 
    }); 
}); 

工作示例:http://jsfiddle.net/VmELF/4/

如果你要绑定的功能,其被注入到DOM文本框在dom负载之后(可能通过Ajax调用等),你m AY使用jQuery on

$(function(){ 
    $("body").on("keyup","#txtSearchKey",function (event) { 
    alert($(this).val()) 
    }); 
}); 
1

您在onkeypress中的初始化拼写与声明不匹配(inititalize)。

0

代替标记事件处理程序,你可以使用jQuery:

var x; 

$("#txtMy").on("keyup", function(){ 
    x = $(this).val(); 
    alert(x); 
}) 
+1

删除了我以前的评论,因为您已经编辑了该问题并且使其无关紧要。 – 2012-04-18 17:02:01

0

有几件事情:

  1. 使用keyup事件。 keypress在录制角色之前开始播放。
  2. 您的initialize()函数拼写错误在您的HTML代码片段中。

看到http://jsfiddle.net/8XTLW/1/

1

​​和keypress事件工作的jsfiddle都执行之前输入的密钥实际上已经出现在文本框中。如果您想在密钥出现后获取输入的新值,请改为使用keyup事件。

<input type="text" ID="txtMy" name="txtMy" onkeyup="initialize();"/> 

initialize() 
{ 
    var x = $("#txtMy").val(); 
} 

您应该考虑使用.on(),因为你使用的库反正在JavaScript绑定你的事件处理程序。保持你的逻辑(javascript)从你的视图(html)分离是一个很好的习惯。