我需要确定导致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()”事件在所有其他事件之前发生。
答案 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()”事件发生在
经过一些研究,很明显在“ .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
}
});
请在我的答案中添加任何评论/建议/优化作为评论!很想听听其他意见。