2014-11-11 4 views
0

У меня есть серия divs, которые показывают ссылку на ссылку. Когда я обнаружил, что я пытаюсь сделать их близкими на фоновом клике, сохраняя при этом их способность иметь разные div, заменяя друг друга при нажатии на разные ссылки.скрыть div на фоне нажмите

JS скрипка здесь: http://jsfiddle.net/t593pyg9/3/

$(document).ready(function() { 
    $('.toggle').hide(); 
    $('a.togglelink').on('click', function (e) { 
     e.preventDefault(); 
     var elem = $(this).next('.toggle') 
     $('.toggle').not(elem).hide(); 
     elem.toggle(); 
    }); 
}); 
+5

Я не совсем понимаю проблему. – Jonast92

+0

Может быть, эта ссылка поможет: [JQuery скрыть, нажав вне DIV] [1] [1]: http://stackoverflow.com/questions/16164799/jquery-hide-by-clicking- outside-of-div – mp9007

ответ

2

Слушайте щелчки по всему документу, чтобы предотвратить это закрытие «всплывающего окна» после нажатия это ссылка из-за распространение событий добавить return false; к шоу щелчка слушателю.

$('.toggle').hide(); 
$('a.togglelink').on('click', function (e) { 
    e.preventDefault(); 
    var elem = $(this).next('.toggle') 
    $('.toggle').not(elem).hide(); 
    elem.toggle(); 
    return false; 
}); 
$(document).on('click',function(e){ 
    $('.toggle').hide(); 
}); 

Fiddle


Update

Если вы хотите, чтобы предотвратить всплывающие окна из укрытия при нажатии на нее добавить следующее:

$('.toggle').on('click', function (e) { 
    return false; 
}); 

New Fiddle

+1

Это почти все, но у него есть побочный эффект предотвращения кликов, работающих над ссылками в переключаемом div. Я считаю, что это должен быть event.stopPropagation(); в отличие от e.preventDefault(); но я не совсем понял, как именно это будет реализовано, или если он действительно прав ... Любые мысли? Моя новая попытка JS здесь: http://jsfiddle.net/ee91fvtz/2/ – user3058496

+0

Вы правы с 'stopPropagation()', это предотвратит только ваши обработчики, а 'preventDefault()' предотвратит обработчики по умолчанию для браузеров. Jquery 'return false' делает оба, поэтому вы должны использовать' stopPropagation' вместо 'return false' в прослушивании на' .toogle', вот [скрипка] (http://jsfiddle.net/ee91fvtz/4/) –

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