首页 > 解决方案 > JavaScript/JQuery - 使用 blur() 事件检测 Shift + Tab

问题描述

有一个输入触发了 blur() 事件,我想检测这个输入是否被 Tab 键、shift+tab 键或点击触发。只用 Tab 键检测并单击,我已经得到了。但是 Shift+Tab 键,我不能。我尝试使用 JQuery 方法的 on() 进行检测,window.event.shiftKey并附加keyup,以查看是否先检测到另一个。但是,没有成功。我怎样才能检测到这个?keydownkeypress

我构建了这些代码,但没有人工作:

1.

var shift_key; var key = window.event.keyCode;
$("#address").on('focusout blur keyup keydown keypress',function(e){
    if(e.type == 'keyup' || e.type == 'keydown' || e.type == 'keypress'){
     if(key == 16){
      shift_key = true;
     }
    }else if((e.type == 'focusout' || e.type == 'blur') && key == 9){
      if(shift_key == true){
       document.getElementById('city').focus();
      }
    }
  });
  1. (这一个,我试图抓住一个 Shift 代码和 Tab 代码之后。因为当触发一个关键事件时,他不会模糊输入,所以,我试图抓住keyupkeydownkeypressShift 键。当Tab 被按下,它会自动模糊输入,所以,我试图抓住 Tab 键)

    $("#address").on("keyup keydown keypress", function () {
        var shift_key = key;
        setTimeout(function(){
        $("#address").on("blur focusout", function () {
            var shift_key = key;
        });
        }, 400);
    });
    

标签: javascriptjquery

解决方案


这可能是您想要检测用于离开输入的事件类型。

$("#z").on('keydown blur', function(e) {
  if (e.shiftKey && e.keyCode === 9) {
    console.log('shift tab')
    return false;
  } else if (e.keyCode === 9) {
    console.log('tab')
    return false;
  } else if(e.type == 'blur')  {
    console.log('mosueOUt')
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="z" />


推荐阅读