忽略ux的键盘几秒钟

时间:2015-01-23 03:48:58

标签: javascript jquery jquery-validate

我有一个使用jquery验证器插件的多步骤表单,当你按下回车键时它也会进入下一页。

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);
    }}});

问题是,如果你使用回车按钮,它会在下一页触发验证错误,因为按钮仍然被按下并且它试图转到下一页。

如何在一小段时间内忽略输入键,以便释放回车键可以转到下一页而不会尝试转到下一页之后的页面?

2 个答案:

答案 0 :(得分:2)

您可以在考虑输入密钥的新keydown事件之前等待相应的keyup事件。

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;
});

答案 1 :(得分:0)

您可以像这样使用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);
    }
 }