2015-02-04 4 views
1

Пожалуйста, проверьте JSFiddle:Javascript и фокус на узлах

$('#contacts .tab-content').focusout(function() { 
    $('#contacts .active').removeClass('active'); 
}); 

JSFiddle

У меня есть (Bootstrap 3) панель в нижней части страницы, которая выскакивает при нажатии на его ярлык и возвращается вниз, когда я нажимаю нигде за его пределами. Для этого я сосредоточусь на панели и удаляю класс .active, когда фокус потерян. Проблема в том, что если я нажимаю на любой другой элемент фокусировки внутри панели (например, входы или кнопки), он также теряет фокус и запускает функцию. Как включить все элементы внутри панели и удалить класс .active, когда ни одна из них не сфокусирована?

+0

Я хотел бы изменить подход: вместо того, чтобы слушающий focusout событие на 'content'-TAB-контейнер, чтобы знать, когда вы должны закрыть вкладку, которую вы можете слушать события мыши на все остальное, кроме вашего '.tab-content' div и его детей – BeNdErR

+0

Как я могу это сделать? – Aise

ответ

1
$('#contacts > .nav-tabs a').click(function() { 
    $('#contacts .tab-content').focus(); 
    $('#panel').toggleClass('active'); 
}); 

$(document).click(function(e){ 
    if(!$(event.target).closest(".tab-content").length && !$(event.target).closest(".nav-tabs a").length){ 
     $('#panel').removeClass('active'); 
    } 
}); 

Проверить этот раз

+0

Это отлично работает! Только незначительный недостаток: панель не закрывается при нажатии на пустое место справа или слева от метки. Не могли бы вы объяснить мне, что означает «$ (event.target) .closest (« #contacts ») .length« на самом деле означает? – Aise

+0

@ DanieleColonnese Я только что обновил условие if, чтобы проверить элемент привязки, а не UL. Ближайшие ('# contacts') найдут, что у родителей есть контакты или нет. –

+0

Отлично, работает еще лучше! Большое спасибо! – Aise

Смежные вопросы