javascript - html 元素通过鼠标或键盘获得焦点

标签 javascript html dom-events

如何找出通过鼠标单击、键盘或 JavaScript 函数获得焦点的 HTML 元素(比如说 select 标签)?

<select onfocus="foo(event)"></select>

<script>
function foo(e) {
    if (e.??? == 'mouse') {
        //do something
    }
    else if (e.??? == 'keyboard') {
        //do something different
    }
}
</script>

我还尝试向元素添加 onclick 事件,但首先触发 onfocus 事件。

最佳答案

我不相信有任何本地方法可以查看元素如何获得焦点(如果我错了,请纠正我!)。

但是,您也许可以执行一些操作,例如单击鼠标时进行存储,使用键盘时进行存储,然后根据上次事件状态使用react。

var inputState = null;

document.addEventListener("click", handleClick);
document.addEventListener("keyup", handleKey);

function handleClick () {
    inputState = "mouse";
}

function handleKey () {
    inputState = "keyboard";
}

function foo() {
    if ( inputState === "mouse" ) {
         // mouse code   
    } else if ( inputState === "keyboard" ) {
         // keyboard code   
    } else {
         // Function was called directly   
    }

    // Reset input State after processing
    inputState = null
}

这可能需要一些调整,但我希望您可以使用它来找到正确的答案。

编辑:

我的答案是一个普通的 JS 解决方案,如果您可以访问 jQuery,您可能想研究一下 clickkeyup 事件处理程序。

关于javascript - html 元素通过鼠标或键盘获得焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577996/

相关文章:

javascript - 以编程方式删除按钮上的事件监听器

javascript - 如何创建多个对象,每个对象加载相同的页面但在 javascript 中具有不同的数据?

javascript - window.location.search.substring 在 IE 8 中不起作用

javascript - 在 HTML 中显示变量的最佳做法是什么?

html - 不使用 data-* 前缀的自定义 HTML 属性是否有效?

html - 使下划线 CSS 过渡改变方向

javascript - 通过 Window.open 的 Web Intent 回调事件只是没有发生

javascript - 如何为每个服务器请求设置uid?

javascript - 使用javascript为jwplayer的HTML元素覆盖设置wmode

JQuery 问题 - 直到滚动时 Logo 才会显示