2012-02-15 2 views
5

У меня есть несколько JQuery UI Диалоги обработчиков, все из которых содержит следующее:JQuery UI Dialog - установить конфиг по умолчанию

open: function(event, ui) { 
     $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
     $(".ui-dialog").removeClass("ui-corner-all"); 
}, 

Это так, что диалог имеет квадратные углы, а не круглые. Мне было интересно, можно ли установить этот набор по умолчанию, так что мне не нужно вставлять этот код в каждый диалог конфигурации на странице.

Я знаю, что могу редактировать CSS, но имеет смысл фактически удалить класс, если он не нужен.

+0

Что вы подразумеваете под 'set as default'? Это будет редактирование CSS. Я не вижу необходимости использовать JavaScript каждый раз, когда открывается диалог, когда вы можете легко редактировать CSS, чтобы удалить закругленные углы. – j08691

+0

Возможно, вы хотите увидеть это для лучшего ответа: http://stackoverflow.com/questions/2287045/override-jqueryui-dialog-default-options – phazei

ответ

8

Я знаю, что это не идеально, но вы можете определить свой собственный объект defaults, который содержит ваши значения по умолчанию. Тогда, если вам необходимо изменить или добавить к этим настройкам, вы можете использовать $.extend:

var dialogDefaults = { 
    open: function (event, ui) { 
     $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
     $(".ui-dialog").removeClass("ui-corner-all"); 
    } 
}; 
// then later on: 
$("#foo").dialog($.extend({ }, dialogDefaults, { 
    autoOpen: false, 
    width: 500, 
    /* etc... */ 
})); 

помнить также, что для событий, вы можете связываться с ними за пределами параметров объекта с помощью on (или его братьев и сестер delegate, bind и live). Вы можете использовать этот обработчик событий к нескольким диалогам, применяя один и тот же класс для всех ваших диалогах, например:

$("div.my-dialog-class").on("dialogopen", function (event, ui) { 
    $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
    $(".ui-dialog").removeClass("ui-corner-all"); 
}); 

Просто имейте в виду, что этот обработчик событий не будет срабатывать от новых диалоговых окон. Вы могли бы позволить пузырек события вверх по DOM к body и присоединить обработчик события там (это маршрут я бы):

$(document.body).on("dialogopen", "div.my-dialog-class", function (event, ui) { 
    $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
    $(".ui-dialog").removeClass("ui-corner-all"); 
}); 

С помощью этого метода делегирования событий, вы подаете вашу open функции для всех диалоги, которые будут добавлены к document.body.

+0

Каким будет синтаксис для использования этой концепции по умолчанию для различных настроек свойств диалога (я тоже так сказал? У меня есть серия диалогов, в которых все распределены примерно на 10-12 общих настроек свойств и обслуживания, становится основной задачей. Было бы неплохо только беспокоиться об уникальных настройках для каждого диалога. – InteXX

+0

ОК, понял. Говорил слишком рано. Я просто добавил их как обычно, перед открытием: call. Я использовал [this] (http://stackoverflow.com/questions/5409633/how-to-set-jquery-ui-dialog-defaults) в качестве ссылки. Отлично работает. – InteXX