Javascript JQuery-change和keypress事件给出了不同的结果

Javascript JQuery-change和keypress事件给出了不同的结果,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,我有一个按键事件的奇怪行为 我有一个脚本,删除逗号前的空格,并在逗号后添加空格 $("#answer").keypress(function () { this.value = $.map(this.value.split(","), $.trim).join(", "); }); 如果我使用变更事件方法,它将按预期工作 但是,如果我使用keypress,那么它可以很好地使用逗号,但是它开始删除单词之间的空格 此外,还尝试了不同的事件:input、click、keypup、keypdo

我有一个按键事件的奇怪行为

我有一个脚本,删除逗号前的空格,并在逗号后添加空格

$("#answer").keypress(function () {
  this.value = $.map(this.value.split(","), $.trim).join(", ");
});
如果我使用变更事件方法,它将按预期工作

但是,如果我使用keypress,那么它可以很好地使用逗号,但是它开始删除单词之间的空格

此外,还尝试了不同的事件:
input、click、keypup、keypdown
。。。但行为是一样的

我试图找出是否有人有这个问题,但我似乎找不到任何东西。
你知道哪里不对吗?或者它与另一个脚本有冲突?

只有在您解除输入焦点时才会触发
更改事件。相反,
keypress
事件将在您按键后触发,但在按键导致元素值更改之前-这就是您可以调用
事件的原因。在
keypress
事件中,preventDefault
可防止键入的字符进入输入:

$(“#答案”).keyup(函数(){
log('keypress:'+this.value+'”);
});
$(“#答案”)。更改(函数(){
log('change:'+this.value+'');
});

只有在您解除输入焦点时才会触发
更改
事件。相反,
keypress
事件将在您按键后触发,但在按键导致元素值更改之前-这就是您可以调用
事件的原因。在
keypress
事件中,preventDefault
可防止键入的字符进入输入:

$(“#答案”).keyup(函数(){
log('keypress:'+this.value+'”);
});
$(“#答案”)。更改(函数(){
log('change:'+this.value+'');
});

按键

当浏览器注册键盘输入时,
keypress
事件被发送到元素。因此,当您键入类似“abc”的内容,然后在其后面加上空格时,
keypress
事件将被触发,然后
此.value.split(“,”
将导致
[“abc”]
但您会在其后面运行trim。因此,实际结果如下:

'abc '.split(',').map(x=>x.trim()).join(', ') //=> 'abc'
因此,在
按键
事件期间,所有空格都被删除

改变

当元素的值更改时,将更改事件发送到元素。对于选择框、复选框和单选按钮,当用户使用鼠标进行选择时会立即触发事件,但对于其他元素类型,事件会延迟到元素失去焦点为止

因此,该值从不等待任何特定的键盘输入,您可以执行以下简单行为:

'abc def,abc def'.split(',').map(x=>x.trim()).join(', ') 
//=> 'abc def, abc def'

按键

当浏览器注册键盘输入时,
keypress
事件被发送到元素。因此,当您键入类似“abc”的内容,然后在其后面加上空格时,
keypress
事件将被触发,然后
此.value.split(“,”
将导致
[“abc”]
但您会在其后面运行trim。因此,实际结果如下:

'abc '.split(',').map(x=>x.trim()).join(', ') //=> 'abc'
因此,在
按键
事件期间,所有空格都被删除

改变

当元素的值更改时,将更改事件发送到元素。对于选择框、复选框和单选按钮,当用户使用鼠标进行选择时会立即触发事件,但对于其他元素类型,事件会延迟到元素失去焦点为止

因此,该值从不等待任何特定的键盘输入,您可以执行以下简单行为:

'abc def,abc def'.split(',').map(x=>x.trim()).join(', ') 
//=> 'abc def, abc def'

成功了。非常感谢。这是有道理的!成功了。非常感谢。这是有道理的!