使用相同的类捕获输入的键码

时间:2011-11-19 18:48:18

标签: javascript jquery keycode

我有一个包含许多文本输入的页面。由于种种原因,所有输入都属于同一类。

现在我正在尝试在输入聚焦时捕获ESC按钮,并在输入有值时发出警告。

现在,这在逻辑上仅适用于第一个字段。在第一个字段之后,由于所有输入都共享同一个类,当我按下ESC按钮时,它会给出第一个输入的值。

那么我怎么能说我正在谈论第二,第五或任何我正在按ESC的输入。

以下是一个示例:http://jsfiddle.net/Y5e9W/

第一个输入工作正常,第二个输入思想;当你按下ESC时,它会给你第一个的值。

2 个答案:

答案 0 :(得分:3)

您应该能够将keyup事件与您的类绑定到元素,而不是document。然后this将引用具有焦点的元素:

$(".gp").keyup(function(e) {
    if(e.which === 27) {
        if(this.value.length > 0) {
            //Has a value!
        }
        else {
            //Empty!
        }
    }
});

这是一个updated fiddle。请注意,我使用了事件对象的which属性,jQuery公开该属性来处理keyCodecharCode之间的浏览器差异。

根据评论

更新

如果您确实需要在document级别处理此问题,则可以使用has方法将您选择的.gp元素缩小到具有焦点的元素:

if (gj.has(":focus").val() != 0) { //...

这是another fiddle

答案 1 :(得分:0)

你可以做 -

$(".gp").keyup(function (e) {
     if ($(this).is(":focus") && (e.keyCode == 27)) {
         if ($(this).val() != 0){
             alert('full');
               $(this).val('');
         }else{
             alert('empty');}
    }
});

只会使用“gp”类响应元素的keyup事件,然后您可以使用this来访问相关元素。

演示 - http://jsfiddle.net/uqS72/2/