如何一次只触发一个事件

时间:2013-06-11 10:09:03

标签: javascript jquery

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

我需要检测用户何时远离输入框或何时远离输入框。 当我按下一个键时,上面的代码会触发两次。如何激活标签或焦点,但不是两个?

4 个答案:

答案 0 :(得分:1)

你可以稍微去辩论一下:

http://jsfiddle.net/wVbeB/

(function () {
    var timeout;
    $(".timeSeenInput").on("focusout keypress", function (event) {
        if (!timeout) {
            var self = this;
            timeout = setTimeout(function () {
                console.log(self.id);
                timeout = null;
            }, 0);
        }

    })
})();

答案 1 :(得分:0)

两个事件都会产生标签。你可以标记你的标签事件,而不是处理模糊:

var handleBlur = true;
$(".timeSeenInput").on("focusout keypress",function(event) {
    if (event.type === 'keypress' && event.keyCode === TAB) {
        alert($(this).attr("id"));
        handleBlur = false;
        return;
    } else if (event.type === 'blur' && handleBlur) {
        // Handle blur
    }
    handleBlur = true;
});

答案 2 :(得分:0)

这是blur事件的目的。

小提琴:http://jsfiddle.net/DPh6P/

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

答案 3 :(得分:0)

只有在按下tab keyfocusout发生时才会触发:

$(".timeSeenInput").on("focusout keydown", function (e) {
   var kc = e.which || e.keyCode;
   if (kc === 9) {
      alert('focusout with tab only');
   }
});