Главная > JavaScript, Программирование > Как закрыть диалог

Как закрыть диалог

Представьте что у вас на странице есть 5 разных диалогов, они могут быть открыты в любой последовательности но два сразу открытыми быть не могут. Значит надо закрывать все открытые, но как их ывыбрать, не хранить же 5 ссылок на диалоги.

Первый пришедший в голову вариант был прост как двери


$("#dialog1","#dialog2","#dialog3","#dialog4","#dialog5").dialog("close");

но если хотя бы один диалог не был создан при старте страницы то вылетит Exception. Естественно создавать диалоги при старте бессмысленно. ни один может не понадобиться а ресурсов они отъедают нормально. Второй вариант был таким


for (var i=1,j=5;i<j;i++){
	try{
		$("#dialog"+i).dialog("close");
	}catch(e){
		// do nothing
	}
}

и несколько дней эта конструкция муляла мне глаза. Наконец я переписал это примерно так


for (var i=1,j=5,d;i<j;i++){
	d = $("#dialog"+i);
	if(d.data("dialog")){
		d.dialog("close");
	}
}

стало лучше но еще не совершенно, последним вариантом стало


$("div:data(dialog)").dialog("close");

теперь я доволен, а какие еще есть варианты?

  1. msfs11
    17 Январь 2012 в 10:23 | #1
    Я не тестировал на скорость выборку по data, но еще есть более очевидный и простой для понимания
    
    $('#dialogs > div')
    
  2. msfs11
    17 Январь 2012 в 11:58 | #3
    не понел, что и где перечислять?
  3. 17 Январь 2012 в 12:06 | #4
    если 5 диалогов то как все вместе закрыть? надо указать в селекторе 5 айдишников, верно? а в моем последнем случаи ничего указывать не надо.
  4. msfs11
    17 Январь 2012 в 12:44 | #5
    блять, без кода самого метода и хтмля я больше не скажу, потому что может получица разговор глухого со слепым. что вернет $("div:data(dialog)")? набор элементов соответствующих критерию, тоже что и $('#dialogs > div'), если конечно хтмл будет соответствовать. только выборка по data(dialog) мне кажеца будет выполняться дольше.
  5. 17 Январь 2012 в 12:52 | #6
    если диалог открывается $("#dialog").dialog({}) то $("div:data(dialog)") вернет $("#dialog") на котором можно вызвать метод .dialog("close").
  6. v3shin
    26 Январь 2012 в 10:37 | #7
    Предположу, что: if([d = $('div[id^="dialog"]'), d.length][1]) d.dialog("close"); На счет производительности не уверен.
  7. 26 Январь 2012 в 11:24 | #8
    красиво завернул в массив, но бессмысленно, в общем случаи это тоже самое что $('div').dialog("close"); а этот код бросает эксепшн
  1. Пока что нет уведомлений.