确定焦点事件:单击或制表符

时间:2011-05-27 05:53:33

标签: javascript jquery focus

如果焦点是针对click事件或tabstop触发的,如何确定jQuery上的焦点事件?我有这个焦点事件,如果焦点是由一个tabstop触发我将执行一些东西,如果它是一个点击我不会执行它。

这是一个伪代码

$('a').focus(function(){
    if(ThisIsTabStop()) {
         IWillExecuteThis();
    }
});

1 个答案:

答案 0 :(得分:7)

如果单击某个元素,则会在焦点前触发mousedown事件。您只需设置一个数据属性,并在焦点事件中进行检查。

试试此演示:http://jsfiddle.net/KcGcF/1/

$('a').mousedown(function(e){
    var $this = $(this);

    // Only set the data attribute if it's not already focused, as the
    // focus event wouldn't fire afterwards, leaving the flag set.
    if(!$this.is(':focus')){
        $this.data('mdown',true);
    }
});

$('a').focus(function(e){
    var $this = $(this);
    var mdown = $this.data('mdown');

    // Remove the flag so we don't have it set next time if the user
    // uses the tab key to come back.
    $this.removeData('mdown');

    // Check if the mousedown event fired before the focus
    if(mdown){
        // Click
    } else {
        // Tab
    }
});