jquery应该只触发一个事件

jquery应该只触发一个事件

问题描述:

我已经写了两个脚本一个用于输入按钮单击和一个用于更改,但两个事件都是正在触发,我想如果通过按键/ keydown /按键/粘贴点击输入按钮然后更改不应该作为以及在keyup/keydown/keypress /粘贴上只有一个事件应该触发。jquery应该只触发一个事件

$('#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

'keypress'和'keyup'都触发(在不同阶段)的单按键行程。你在期待什么? – George

+0

在输入按键或键盘上,按下火或点火按钮,如果点击输入,则更改事件不应触发 – Rocky

原因您正在使用两个事件与键监听器。只需使用其中的一个keypresskeyup事件。

并添加一个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">

当用户按下一个按键,keyup事件是火按键事件火的时候用户释放键(按下后)。因此,如果您想一次触发一个事件,您应该使用按键或键盘输入。

如果#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 
}