Jquery应该只触发一个事件

Jquery应该只触发一个事件,jquery,Jquery,我已经编写了两个脚本,一个用于Enter按钮单击,另一个用于更改,但这两个事件都会触发,我想如果Enter按钮被keyup/keydown/keypress/paste单击,那么更改也不会在keyup/keydown/keypress/paste上触发,只会触发一个事件 $('#txtName').on('keypress keyup paste', function (e) { var keyCode = e.keyCode || e.which; if (keyCode ==

我已经编写了两个脚本,一个用于Enter按钮单击,另一个用于更改,但这两个事件都会触发,我想如果Enter按钮被keyup/keydown/keypress/paste单击,那么更改也不会在keyup/keydown/keypress/paste上触发,只会触发一个事件

$('#txtName').on('keypress keyup paste', function (e) {
    var keyCode = e.keyCode || e.which;
    if (keyCode === 13) {
        AddName($('#txtName').val());
    }
});  

$('#txtName').on({   
   change: function () { AddName($('#txtName').val()); }
});

因为您正在对密钥侦听器使用两个事件。只需使用其中一个
keypress
keyup
事件

并添加一个
事件.preventDefault()
对于停止事件,它不会触发
更改
事件

$('#txtName')。在('keyup-paste',函数(e)上{
var keyCode=e.keyCode | | e.which;
如果(键代码===13){
e、 预防默认值();
AddName($('#txtName').val(),e);
}
});  
$('#txtName')。在({
更改:函数(e){AddName($('#txtName').val(),e);}
});
函数AddName(值,e)
{
console.log(e.type+“-”+值);
}

因为您正在对键侦听器使用两个事件。只需使用其中一个
keypress
keyup
事件

并添加一个
事件.preventDefault()
对于停止事件,它不会触发
更改
事件

$('#txtName')。在('keyup-paste',函数(e)上{
var keyCode=e.keyCode | | e.which;
如果(键代码===13){
e、 预防默认值();
AddName($('#txtName').val(),e);
}
});  
$('#txtName')。在({
更改:函数(e){AddName($('#txtName').val(),e);}
});
函数AddName(值,e)
{
console.log(e.type+“-”+值);
}

当用户按下某个键时,keypress事件触发,当用户释放该键(按下后)时,keyup事件触发。因此,如果您希望一次触发一个事件,您应该使用keypress或keyup。

当用户按下一个键时,keypress事件触发,当用户释放键(按下后)时,keyup事件触发。因此,如果希望一次触发一个事件,则应使用keypress或keyup。

如果
#txtName
此处有一个输入框,则
更改事件将延迟到元素失去焦点,并且如果值已从以前的状态更改,则会触发该事件

根据您的需求,您可以组合
jquery.on
上的所有事件,并在处理程序中添加逻辑,如下所示:

$('#txtName').on('keypress keyup paste change', function (e) {
    var keyCode = e.keyCode || e.which;
    if (e.type == "change") {
      AddName($('#txtName').val());
    }
     else if (keyCode === 13) {
        AddName($('#txtName').val());
    }
});  

function AddName() {
  // Your code here
}
如果此处的
#txtName
是一个输入框,则
更改
事件将被延迟,直到元素失去焦点,如果值已从以前的状态更改,则会触发该事件

根据您的需求,您可以组合
jquery.on
上的所有事件,并在处理程序中添加逻辑,如下所示:

$('#txtName').on('keypress keyup paste change', function (e) {
    var keyCode = e.keyCode || e.which;
    if (e.type == "change") {
      AddName($('#txtName').val());
    }
     else if (keyCode === 13) {
        AddName($('#txtName').val());
    }
});  

function AddName() {
  // Your code here
}

keypress
keyup
都是针对单个按键行程触发的(在不同阶段)。您期望的是什么?在enter keypress或keyup时,keypress fire或keyup fire,如果单击enter,则更改事件不应触发
keypress
,并且
keyup
都会在单个按键行程中触发(在不同阶段)。您期望的是什么?在输入keypress或keyup时,keypress激发或keyup激发,如果单击enter,则不应激发更改事件