只有一个keyup
,keypress
或keydown
的绑定才能找出字段值已被更改?
我的意思是 - 某些按键不会改变值(如按向左箭头)而有些按键(如按任何字母按钮或退格键)。
那么有可能知道按键导致值变化只有一个绑定吗?
PS:是的,我意识到我可以在某处保存值并在事件处理程序的开头比较它,但是有没有临时变量的解决方案吗?答案 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
部分的信息,它看起来像是:
keypress
个事件keyCode
/ key
),以及它是否具有可打印的表示or not(如果有,则会改变该值;但是没有可打印表示的键也可以改变它。)转到除MDN之外的其他来源也会this nice resource,其中包含有关如何跨浏览器填充keyCode
属性的信息。
上述的一个更好的替代方案是DOM级别3 textInput
事件,但它也有严重的缺点:
答案 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 + '"');
}
});
注意当用户按住键时(例如:箭头键)仍有角落,然后用鼠标修改字段内容,然后释放键。
但是这种情况不大可能发生,我想这是可以接受的。