Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何一次只触发一个事件_Javascript_Jquery - Fatal编程技术网

Javascript 如何一次只触发一个事件

Javascript 如何一次只触发一个事件,javascript,jquery,Javascript,Jquery,我需要检测用户何时远离输入框或何时远离输入框。 当我按键时,上面的代码会触发两次。如何使tab或focusout触发,而不是两者都触发?两个事件都会生成tab或focusout。您可以标记跳出事件而不处理模糊: $(".timeSeenInput").on("focusout keypress",function(event){ alert($(this).attr("id")) }) 这就是模糊事件的作用 小提琴: 这仅在按下tab键并且发生focusout时才会触发

我需要检测用户何时远离输入框或何时远离输入框。
当我按键时,上面的代码会触发两次。如何使tab或focusout触发,而不是两者都触发?

两个事件都会生成tab或focusout。您可以标记跳出事件而不处理模糊:

$(".timeSeenInput").on("focusout keypress",function(event){
        alert($(this).attr("id"))
    })

这就是模糊事件的作用

小提琴:


这仅在按下
tab键
并且发生
focusout
时才会触发:

$(".timeSeenInput").on("blur", function (event) {
    alert($(this).attr("id"))
})

你可以稍微减轻它的重量:


blur
这是您所需要的吗?您真的希望每次按下
键都使用它吗?这将在用户输入时触发。@Jai为什么模糊?与focusout的行为相同,但不包括bubbling@roasted啊,我不知道,谢谢。@Jai-how,事实上我没有看到你在问一个问题“?”以及OP是否也想在按键上触发事件?@broading“我需要检测用户何时远离输入框或何时远离输入框”。在我看来,他似乎想检测用户何时离开输入。@MattHarrison我理解OP的问题,他不想在按TAB键时触发这两个事件,但我应该承认,我看不到使用这两个事件的真正原因。在这种情况下,只有keypress事件应该足够或仅模糊。
$(".timeSeenInput").on("blur", function (event) {
    alert($(this).attr("id"))
})
$(".timeSeenInput").on("focusout keydown", function (e) {
   var kc = e.which || e.keyCode;
   if (kc === 9) {
      alert('focusout with tab only');
   }
});
(function () {
    var timeout;
    $(".timeSeenInput").on("focusout keypress", function (event) {
        if (!timeout) {
            var self = this;
            timeout = setTimeout(function () {
                console.log(self.id);
                timeout = null;
            }, 0);
        }

    })
})();