2012-02-15 18 views
5

Ho diversi gestori di jQuery UI Finestre, ognuno dei quali contiene quanto segue:jQuery UI Dialog - impostare una configurazione di default

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

Questo è così che la finestra ha angoli quadrati, piuttosto che quelli rotondi. Mi stavo chiedendo se è possibile avere questo set come predefinito, in modo che non devo inserire questo codice in ogni finestra di dialogo di configurazione nella pagina.

So che posso modificare il CSS, ma ha più senso rimuovere effettivamente la classe se non è necessaria.

+0

Cosa intendi con "imposta come predefinito"? Quello sarebbe modificare il CSS. Non vedo l'esigenza di utilizzare JavaScript ogni volta che si apre la finestra di dialogo quando è possibile modificare facilmente il CSS per rimuovere gli angoli arrotondati. – j08691

+0

Potrebbe voler vedere questo per una risposta migliore: http://stackoverflow.com/questions/2287045/override-jqueryui-dialog-default-options – phazei

risposta

8

So che non è perfetto, ma è possibile definire il proprio oggetto defaults che contiene i valori predefiniti. Poi, se è necessario sostituire o aggiungere a quelle di default, è possibile utilizzare $.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... */ 
})); 

Ricordiamo inoltre che per gli eventi, è possibile associare a loro al di fuori delle opzioni oggetto utilizzando on (o suoi fratelli delegate, bind e live). È possibile applicare tale gestore di eventi a più finestre di dialogo, applicando la stessa classe a tutte le finestre di dialogo, ad esempio:

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

Basta tenere a mente che questo gestore di eventi non sparare per le nuove finestre di dialogo. Si potrebbe lasciare la bolla dell'evento il DOM al body e allegare il gestore di eventi c'è (questo è l'itinerario vorrei andare):

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

Con questo metodo di delega evento, si sta applicando la funzione open a tutti finestre di dialogo che verranno mai aggiunte a document.body.

+0

Quale sarebbe la sintassi per l'utilizzo di questo concetto predefinito per le varie impostazioni delle proprietà di dialogo (ho detto bene anch'io? Ho una serie di dialoghi che condividono circa 10-12 impostazioni di proprietà comuni e la manutenzione sta diventando un compito ingrato. Sarebbe bello dover solo preoccuparsi delle impostazioni univoche per finestra di dialogo. – InteXX

+0

OK, capito. Ha parlato troppo presto. Li ho appena aggiunti come prima, normale: call. Ho usato [questo] (http://stackoverflow.com/questions/5409633/how-to-set-jquery-ui-dialog-defaults) come riferimento. Funziona alla grande, grazie. – InteXX