找出keypress是否改变了价值

时间:2012-03-29 21:22:09

标签: javascript jquery html

只有一个keyupkeypresskeydown的绑定才能找出字段值已被更改?

我的意思是 - 某些按键不会改变值(如按向左箭头)而有些按键(如按任何字母按钮或退格键)。

那么有可能知道按键导致值变化只有一个绑定吗?

PS:是的,我意识到我可以在某处保存值并在事件处理程序的开头比较它,但是有没有临时变量的解决方案吗?

3 个答案:

答案 0 :(得分:2)

我不这么认为。我的意思是,您可以映射您认为是静音的键代码,但该地图可能不是100%可靠,因为输入值可能会改变或松散焦点,具体取决于操作系统和浏览器的设置方式。

是否有特殊原因未通过变量检测更改?这似乎是最可靠的事情,因为这也是您需要检测的内容:

var input = $('input'),
    val = input.val();
input.keyup(function(e) {
    ​​​​​​​if (val != (val = $(this).val())) {
        console.log('change');
    }
});​

如果您不想使用杂散变量,请如何将其保存在data属性中?

$('input').keyup(function(e) {
    ​​​​​​​if ($(this).val() != $(this).data('value')) {
        console.log('change');
    }
    $(this).data('value', $(this).val());
});​

根据您的评论进行更新

如果您不关心密钥,也可以使用input事件(在现代浏览器中)检测更改:

$('input').bind('input', function() { 
   console.log('changed');
});

最后一个选项是使用间隔并继续检查输入字段(这可能是最可靠的选项)。

答案 1 :(得分:2)

根据来自MDN KeyboardEvent部分的信息,它看起来像是:

  • 您感兴趣的所有密钥在每次要处理密钥时都会reliably generate keypress个事件
  • 您可以判断哪个键被按下(keyCode / key),以及它是否具有可打印的表示or not(如果有,则会改变该值;但是没有可打印表示的键也可以改变它。)

转到除MDN之外的其他来源也会this nice resource,其中包含有关如何跨浏览器填充keyCode属性的信息。

上述的一个更好的替代方案是DOM级别3 textInput事件,但它也有严重的缺点:

  1. 目前尚未在主要浏览器中实施
  2. 根据我的意见,当从输入元素删除文本
  3. 时,它不适用

答案 2 :(得分:1)

我很确定你不能在没有将原始值存储在某处的情况下正确

如果您只想检测键盘交互所做的更改,请尝试此操作。

$('#foo').keydown(function (e) {
    this.data = this.value;
});

$('#foo').keyup(function (e) {
    if(this.data != this.value) {
        console.log('changed from "' + this.data + '" to "' + this.value + '"');
    }
});

注意当用户按住键时(例如:箭头键)仍有角落,然后用鼠标修改字段内容,然后释放键。

但是这种情况不大可能发生,我想这是可以接受的。