javascript - 区分键盘/鼠标触发的焦点事件

标签 javascript jquery jquery-ui jquery-ui-autocomplete

我正在使用 jquery ui 自动完成功能,并且想要破译由键盘交互和鼠标交互触发的焦点事件。我该怎么办?

$('input').autocomplete({
    source: function(request, response) {
        ...
    },
    focus: function(event, ui) {
        // If focus triggered by keyboard interaction
            alert('do something');
        // If focus event triggered by mouse interaction
            alert('do something else');
    }
});

谢谢

最佳答案

我能想到的唯一方法是让处理程序监听 keypressclick事件,并打开/关闭 bool 标志。然后就focus输入的处理程序,您只需检查标志的值是什么,然后从那里开始。

大概是这样的

var isClick;
$(document).bind('click', function() { isClick = true; })
           .bind('keypress', function() { isClick = false; })
           ;

var focusHandler = function () {
    if (isClick) {
        // clicky!
    } else {
        // tabby!
    }
}

$('input').focus(function() {
    // we set a small timeout to let the click / keypress event to trigger
    // and update our boolean
    setTimeout(focusHandler,100);
});

在 jsFiddle 上制作了一个小型工作原型(prototype)(您不喜欢这个网站吗?)。 Check it out if you want.

当然,这都是在 focus 上运行的。 <input> 上的事件,但是focus自动完成处理程序的工作方式相同。

setTimeout会引入一点延迟,但在 100 毫秒时,根据您的需要,它可能可以忽略不计。

关于javascript - 区分键盘/鼠标触发的焦点事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5653332/

相关文章:

php - 多个单选按钮ajax post

jquery - 如何创建函数序列?

php - Ajax 数据未发送到 Controller 功能 (Laravel)

javascript - 如何删除或更改弹出的自动消息

ruby-on-rails - Rails拖放和排序元素到nested_form

javascript - 网页。背景是如何构建的。

javascript - 使用 jQuery 将箭头键绑定(bind)到导航

javascript - 如何制作用户可以使用导航按钮而不使用计时器的幻灯片

javascript - 为什么此 HTML 范围栏的值大于 1,而其最大值设置为 1?

jquery - 如何使用addClass和removeClass控制JQuery的速度?