Если ваши ссылки указывают на идентификаторы элементов диалога, и если вы добавляете метакласс choose
к каждому из них, вы можете объединить последние три вызова с:
$('a.choose').click(function() {
$(this.hash).dialog('open');
return false;
});
HTML-код для одной из этих ссылок является наиболее семантически правильным и даже работает с отключенным JS (при условии, что диалоги есть):
<a href="#chooseMoreCat" class="choose">Choose more categories</a>
Часть this.hash
объяснила:
this
в контексте функции обработки событий jQuery всегда есть элемент, в котором произошло событие. В нашем случае это нажатая ссылка. Обратите внимание, что это узел DOM , а не элемент jQuery.
this.hash
: Узлы DOM , которые соответствуют элементам HTML <a/>
, имеют определенные специальные свойства, которые позволяют получить доступ к цели, на которую они ссылаются. Свойство hash
- это все после (и включая) символ #
в URL. В нашем случае, если ссылка указывает на элементы, которые должны стать диалогами, это что-то вроде строки "#chooseMoreCnt"
.
$(this.hash)
- это вызванная функция jQuery, например, "#chooseMoreCnt"
, которая выберет соответствующую div
.
Для инициализации диалога я бы также выбрал классы:
$(".choose_dialog").dialog({
bgiframe: true,
autoOpen: false,
width: 500,
modal: true,
open: function(type, data) {
$(this).parent().appendTo(jQuery("form:first"));
}
});
Да, это означает, что нужно изменить разметку, но она также предоставляет вам свободу
добавить любое количество диалогов позже
добавить любое количество открывателей в любой диалог позже
стиль всех диалогов и ссылок на них последовательно с минимальным CSS
больше не трогая Javascript.
Если диалоги инициируются по-другому (как упомянуто в комментариях), то вы можете перейти к этой части с подходом CuSS $.each()
и прочитать соответствующую ширину внутри функции из объекта, определенного в другом месте:
var dialog_widths = {'chooseMoreCat': 400, 'chooseMorePr': 300, /*...*/ };