为 ux 忽略 keyup 几秒钟

Ignore keyup for a few seconds for ux

我有一个使用 jquery 验证器插件的多步表单,当您按 enter 时它也会转到下一页。

function showPage(pg){
    $('formError').empty();
    $('table:visible').hide();
    $('#page-' + pg).show();
    $('input[type="text"]:visible').focus();
}
$(document).keydown(function(e) {
if(e.which == 13) {
    if($('#msform :input:visible').valid()){
    page++;
    showPage(page);
    }}});

问题是,如果您使用回车按钮,它会在下一页触发验证错误,因为该按钮仍在按下,它会尝试转到下一页。

如何在短时间内忽略回车键,以便释放回车键进入下一页,而不是尝试进入下一页之后的页面?

您可以像这样使用 setTimeout() 函数

$(document).keydown(function(e) {
    setTimeout(myFunction(),500);
    });
function myFunction(){
    if(e.which == 13) {
      if($('#msform :input:visible').valid()){
      page++;
      showPage(page);
    }}
}

::::::::::::::::::更新::::::::::::::::::

$(document).keydown(function(e) {
     if(e.which == 13) {   
       setTimeout(myFunction(),500);
     }
  });
function myFunction(){
   if($('#msform :input:visible').valid()){
     page++;
     showPage(page);
    }
 }

您可以等待相应的 keyup 事件,然后再考虑 enter 键的新 keydown 事件。

pressed = {};

$(document).keydown(function(e){
        if(pressed[e.which] == null && e.which == '13'){
            if($('#msform :input:visible').valid()) {
                page++;
                showPage(page);
                }
            }
        pressed[e.which] = true;
});

$(document).keyup(function(e) {
    pressed[e.which] = null;
});