Detect focus initiated by tab key?
I know you have accepted an answer but you could test the button pressed using the following:
$('#detect').on('focus', function(e){
$(window).keyup(function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code == 9) {
alert('I was tabbed!');
}
});
});
http://jsfiddle.net/LPGLm/1/
Edit: change the listener around:
$(window).keyup(function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code == 9 && $('#detect:focus').length) {
alert('I was tabbed!');
}
});
http://jsfiddle.net/LPGLm/7/
A more responsive solution would be to use two listeners:
var mousedown = false;
$('#detect').on('mousedown', function () {
mousedown = true;
});
$('#detect').on('focusin', function () {
if(!mousedown) {
// logic
}
mousedown = false;
});
Fiddle showing the difference in speed:
http://jsfiddle.net/u2y45/1/
As you've noticed, the event object itself does not distinguish the means of access. What you can do is to bind a mousedown
listener, which will fire before focus
, and set some timestamp flag that you compare to some threshold value in your focus
handler.