我已经为Enter按钮单击编写了两个脚本,另一个用于更改,但是两个事件都在触发,我想如果输入按钮被keyup / keydown / keypress / paste点击,那么更改不应该在keyup / keydown /上触发按键/粘贴只应触发一个事件。
$('#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()); }
});
答案 0 :(得分:1)
因为您正在使用带有键侦听器的两个事件。只需使用其中一个keypress
或keyup
事件。
添加event.preventDefault();
以停止事件,它不会触发change
事件。
$('#txtName').on('keyup paste', function (e) {
var keyCode = e.keyCode || e.which;
if (keyCode === 13) {
e.preventDefault();
AddName($('#txtName').val(),e);
}
});
$('#txtName').on({
change: function (e) { AddName($('#txtName').val(),e); }
});
function AddName(value,e)
{
console.log(e.type+ " - "+value);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="txtName">
答案 1 :(得分:1)
如果此处的#txtName
是输入框,则change
事件将延迟,直到该元素失去焦点,并且如果该值已从之前的状态更改,则会触发该事件。
根据您的要求,您可以合并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
}
答案 2 :(得分:0)
按键事件触发,当用户释放该键时(按下之后),键盘事件就会触发。因此,如果您希望一次触发一个事件,则应使用keypress OR keyup。