2012-02-15 13 views
5

Mam kilka jQuery UI dialogi teleskopowe, z których każdy zawiera następujące informacje:jQuery UI Dialog - ustawić domyślny config

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

To jest tak, że okno posiada kwadratowe narożniki, zamiast okrągłych nich. Zastanawiam się, czy możliwe jest ustawienie tego zestawu jako domyślnego, tak, że nie muszę wstawiać tego kodu do każdej konfiguracji okna dialogowego na stronie.

Wiem, że mogę edytować CSS, ale bardziej sensownym jest usunięcie klasy, jeśli nie jest to konieczne

+0

Co masz na myśli przez "ustaw jako domyślny"? To byłoby edytowanie CSS. Nie widzę potrzeby stosowania JavaScript za każdym razem, gdy otwierane jest okno dialogowe, gdy można łatwo edytować kod CSS w celu usunięcia zaokrąglonych narożników. – j08691

+0

Może chcesz zobaczyć to, aby uzyskać lepszą odpowiedź: http://stackoverflow.com/questions/2287045/override-jqueryui-dialog-default-options – phazei

Odpowiedz

8

Wiem, że nie jest doskonały, ale można zdefiniować własny obiekt defaults zawierający wartości domyślne. Potem, jeśli trzeba zastąpić lub dodać do tych wartości domyślnych, można użyć $.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... */ 
})); 

Należy również pamiętać, że w przypadku zdarzeń, można wiązać z nimi poza opcjami obiektów przy użyciu on (lub jego rodzeństwo delegate, bind i live). Można stosować tę procedurę obsługi zdarzenia do wielu oknach, stosując tę ​​samą klasę do wszystkich dialogów, na przykład:

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

Wystarczy pamiętać, że ta funkcja obsługi zdarzenia nie będzie wystrzelić nowych oknach. Można pozwolić bańki zdarzeniu DOM do body i dołączyć obsługi zdarzeń tam (jest to droga pójdę):

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

Dzięki tej metodzie delegacji zdarzeń, starasz się swoją funkcję open wszystkim dialogi, które kiedykolwiek będą dołączone do document.body.

+0

Jaka byłaby składnia użycia tej domyślnej koncepcji dla różnych ustawień właściwości okna dialogowego (Czy powiedziałem to dobrze)? Mam serię dialogów, w których wszystkie mają około 10-12 wspólnych ustawień właściwości i konserwacji staje się obowiązkiem. Byłoby miło tylko martwić się o unikalne ustawienia w każdym oknie dialogowym. – InteXX

+0

OK, rozumiem. Mówił zbyt szybko. Po prostu dodałem je normalnie, przed twoim otwarciem: zadzwoń. Użyłem [this] (http://stackoverflow.com/questions/5409633/how-to-set-jquery-ui-dialog-defaults) jako odnośnika. Działa świetnie, dzięki. – InteXX