检测导致HTML span标签成为焦点的事件

时间:2018-07-16 13:26:59

标签: javascript jquery html

我需要确定导致HTML span标签成为焦点的事件。 span标签是来自bootstrap v3的glyhpicon。

现在,我在span标记上附加了一个.focus()事件处理程序,以捕获焦点何时发生,但是我不知道如何分辨焦点是由单击还是制表符引起的。 / p>

HTML标记:<span class="glyphicon glyphicon-ok-circle col-xs-6"></span>

jQuery:

$("span").focus(function (e) {
    var event = "click"   //This "event" var is the event that caused the focus
    if(event == "click"){
        //do something
    }else{
        //if not a click event, do something else
    }
});

我是否使用eventData(e)参数进行检测?

到目前为止,我还无法找到显示引起eventData(e)参数内焦点的原因的属性。 “ originalEvent”属性仅返回“ focus”,而不是导致它的原因。

编辑:Differentiate between focus event triggered by keyboard/mouse中的答案不符合我的问题。该用户正在尝试查找jquery“自动完成”元素上是否发生了单击或键盘事件。我需要找到导致焦点集中在span标签上的事件,而不是输入标签。元素的“ .focus()”事件在所有其他事件之前发生。

答案:在下面检查我的帖子。

2 个答案:

答案 0 :(得分:1)

    $('span').on('focus', function(e){
          $( 'span' ).mousedown(function() {
                  alert( "focus using click" );
              });
    $(window).keyup(function (e) {
            var code = (e.keyCode ? e.keyCode : e.which);
            if (code == 9) {
               // Using tab
            }
        });
    });

答案 1 :(得分:-1)

我感谢大家的反馈!答案suggested in the comments可以部分解决问题。但是,我不能给予全部赞誉,因为它没有完全回答问题。

链接中建议的答案是创建一个“ click”和“ keypress”事件以更新一个标记,该标记将在“ .focus()”事件上进行检查以确定其触发方式。我的情况比较复杂。 “ .focus()”事件发生在事件之前 ...因此标记只有在焦点已经发生并通过之后才触发。答案还建议使用“ setTimeout()”来使焦点事件等待..我在结论中认为是不必要的。

结论

经过一些研究,很明显在“ .focus()”事件之前发生了“ .mousedown()”事件。使用上面建议的答案中列出的绑定标志,我创建了以下代码来解决我的问题。

$(document).bind('mousedown', function () { isClick = true; }).bind('keypress', function () { isClick = false; });
$("span").focus(function () {

    if (isClick) {
        //Focused by click event
    } else{
        //Focused by keyboard event
    }
});

在研究过程中,我还注意到“ .bind()”已经deprecated in Jquery v3.0 ...因此我将把代码切换为:

$(document).mousedown(function () { isClick = true; }).keypress(function () { isClick = false; });
$("span").focus(function () {

    if (isClick) {
        //Focused by click event
    } else{
        //Focused by keyboard event
    }
});

请在我的答案中添加任何评论/建议/优化作为评论!很想听听其他意见。