Prevent firing focus event when clicking on div

Этот вопрос похож на мой предыдущий вопрос, Click action on Focused DIV, но на этот раз основная тема - Как предотвратить срабатывание события focus при нажатии на один из div. В прошлый раз у меня был один div с tabindex='-1', чтобы сделать его фокусируемым при клике, теперь у меня есть список div'ов с tabindex>0, чтобы они также получали фокус при переходе по вкладке.

Div one
Div two
Div tree
Div four

некоторые стилизации:

div {
    height: 20px;
    width: 60%;
    border: solid 1px blue;
    text-align: center;
}
div:focus {
    border: solid 2px red;
    outline: none;
}

Теперь я использую флаг (action) для запуска действия (alert) при втором щелчке по div, и только при одном щелчке, если он уже сфокусирован, например, с помощью TAB.

var action = false;
$('div')
    .click(function(e){
        e.stopImmediatePropagation();
        if(action){alert('action');}
        action = true;})
    .focus(function(){action = true;})
    .blur(function(){action = false;});

Проблема с приведенным выше кодом заключается в том, что событие focus срабатывает, что означает, что stopImmediatePropagation не работает так, как я ожидал... Действие двойного щелчка работает, комментируя строку события focus, но вам все равно нужно сделать двойной щелчок, когда div получает фокус на TAB. Вот пример: http://jsfiddle.net/3MTQK/1/

40
задан Community 23 May 2017 в 12:18
поделиться