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

时间:2014-02-05 12:58:50

标签: javascript html javascript-events

如何通过鼠标点击,键盘或JavaScript功能找到HTML-Element(假设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事件首先触发。

3 个答案:

答案 0 :(得分:1)

使用document.activeElement,所有主流浏览器都支持它。它可以为您提供当前的活动元素。

修改

哎呀我想我误解了你的问题。你想识别鼠标或键盘或程序化

对于程序化 if(e.hasOwnProperty('originalEvent')){     //手动触发焦点事件。 }

区分基于键盘和鼠标的焦点事件 你必须通过添加一个额外的keydown事件来破解它并理解。你不能像你想要的那样区分它。

答案 1 :(得分:1)

我不相信有任何原生方式可以看到元素如何得到它的焦点(如果我错了,请纠正我的错误!)。

但是,您可以在单击鼠标时执行存储操作,在使用键盘时存储,然后根据上一个活动状态做出反应。

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事件处理程序。

答案 2 :(得分:0)

如果你想检查天气&lt;选择&gt;用键盘或鼠标点击, 你可以使用mousedown()和keypress()事件

$('select').mousedown(function(e){
  //your code on mouse select
});

$('select').keypress(function(e){
  //your code on key select
});