2013-02-10 2 views
0

Я написал этот код, который показывает меню (div) при нажатии другого div. Проблема в том, что когда у меня открыто одно из меню, и нажмите на div, чтобы открыть новое меню (несколько меню замкнуты), другие меню не закрываются. Это означает, что я могу открывать неограниченное количество меню одновременно, пока я не выхожу за пределы div/menu ...jQuery - Скрыть другие divs при нажатии нового div

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

Код:

$('.commentSettings').click(function(e) { 
    var id = $(this).attr('id'); 
    $('#mod-dropdown' + id).stop().toggle(200); 
    e.stopPropagation(); 
    $('#mod-dropdown' + id).show(); 

    $(document).click(function(){ 
     $("#mod-dropdown" + id).hide(); 
    }); 
}); 
+0

Немного больше контекста, или образец jsfiddle. :( – hjpotter92

ответ

1

Если вы дадите все div, вы хотите скрыть класс, например menu, тогда вы просто можете поп $('.menu').hide(); в начале функции щелчка.

Обратите внимание, что у вас есть документ, готовый к работе внутри функции, и я не думаю, что вы хотели его там поместить. Функция document.ready всегда должна отображаться первой, и вы регистрируете в ней обработчики событий.

+0

Хмм, где вы находите документ готовым? Я не могу найти документ. Уже внутри функции: S – David

+1

Прошу прощения, я неправильно читаю '$ (document) .click (function ...'. Но даже тогда я не думайте, что вы хотите добавить этого обработчика внутри первой функции щелчка. – Deif

+1

'$ ('[id^=" # mod-dropdown "]'). hide();' не быстрый метод? – WooCaSh

0

Я полагаю, все меню имеют общий класс. Используйте это, чтобы сначала закрыть все меню. Затем откройте тот, который был нажат в данный момент.

0

Вы можете иметь что-то вроде этого:

var id = -1; 
$('.commentSettings').click(function(e) { 
    if(id != -1) 
     $('#mod-dropdown' + id).hide(); 
    var id = $(this).attr('id'); 
    $('#mod-dropdown' + id).stop().toggle(200); 
    e.stopPropagation(); 
    $('#mod-dropdown' + id).show(); 

    $(document).click(function(){ 
     $("#mod-dropdown" + id).hide(); 
    }); 
}); 
+0

Вы уверены, что код будет работать? – WooCaSh

+0

Yup. Пока нет '# mod-dropdown-1'. – hjpotter92

0

Это должно работать:

$('.commentSettings').click(function(e) { 
    var id = $(this).attr('id'); 
    $('#mod-dropdown' + id).stop().toggle(200); 
    e.stopPropagation(); 
    $('#mod-dropdown' + id).show(); 
}); 

$(document).click(function(){ 
    $('[id^="#mod-dropdown"]').hide(); 
}); 

Я использую здесь JQuery селектор attributeStartsWith.

Более подробную информацию вы можете найти здесь: http://api.jquery.com/attribute-starts-with-selector/

+0

К сожалению, этот скрипт работает не полностью. При нажатии вне меню меню не закрывается ... – David

+0

Можете ли вы попробовать сейчас? – WooCaSh

+0

Извините, эта же проблема ... – David

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