2010-03-18 13 views
11

¿Existe alguna manera fácil de aplicar CSS/iconos a los botones modales en un cuadro de diálogo modal jQuery UI?jQuery UI: Estilo de botón de diálogo

Si incluyo el HTML para mostrar un icono con el texto del botón, muestra el HTML como texto en lugar de mostrar el código.

Supongo que podría escribir algo de jQuery para encontrar el botón y sobrescribir el HTML con lo que quiero, pero espero que haya una manera más fácil y directa.

Respuesta

14

puedo ver que es bastante vieja pregunta, pero usted puede hacerlo ahora de manera mucho más agradable en jQuery UI, sólo tiene que añadir la 'clase' o propiedades 'estilo' a objeto de botón como este:

$("#id-dialog").dialog({ 
    modal: true, 
    buttons: [ 
     { text: "Save", click: function() { alert("save"); }, class:"sampleClass1", style:"color:Red" }, 
     { text: "Cancel", click: function() { alert("close"); ;}, class:"sampleClass2"} 
    ] 
}); 
+0

He actualizado esto como la respuesta aceptada , ya que es una mejor solución más moderna. –

1

Sí, puede sobrescribir las clases de diálogo modal de CSS para satisfacer sus necesidades. Por ejemplo, usted crear diálogo con la especificación de la clase personalizada:

$("#id-dialog").dialog({ 
      dialogClass: "loadingScreenWindow", 
      ... 

Y luego, en css:

/* hide the title bar on the loading screen */ 
.loadingScreenWindow .ui-dialog-titlebar { 
    display: none; 
} 

Ver http://docs.jquery.com/UI/Dialog#theming para el estilo de diálogo clasificado disponibles

+0

Gracias por esto, aunque ¿cómo sugeriría que esta ruta se usaría para agregar un ícono al primer botón, pero no el segundo botón dentro del área 'ui-dialog-buttonpane'? –

+0

sí ... intenté esto, pero maldición si no usa mis clases personalizadas. –

11

Esto es lo que estoy usando en este momento para nuestros proyectos:

$("#id-dialog").dialog({ 
     modal: true, 
     buttons: { 
      'Login': logIn, 
      Cancel: logOut 
     }, 
     open: function() { 
      $buttonPane = $(this).next(); 
      $buttonPane.find('button:first').addClass('accept').addClass('ui-priority-primary'); 
      $buttonPane.find('button:last').addClass('cancel').addClass('ui-priority-secondary');       
     } 
    }); 

Primero y último trabajo en este caso ya que solo hay dos botones. Puede usar: nth-child (índice) si tiene más de dos botones.

Otra forma de hacer esto sería hacer referencia al elemento padre que abarca tanto el elemento div de diálogo como el elemento div de botón, y luego buscar los botones individuales dentro del elemento principal.

+0

Buena idea: me olvidé de esos selectores particulares. Parece que no hay una manera más directa de hacerlo, así que voy con tu respuesta, ya que parece un enfoque bastante limpio –

+2

Gracias. Por cierto, la interfaz de usuario 1.9 debería tener soporte para un control de botón mejorado. Y si solo desea aplicar el parche 1.8, puede encontrar más información sobre los parches [aquí] (http://dev.jqueryui.com/ticket/4344). –

+0

Tuve que mezclar la adquisición de $ buttonPane porque $ (esto) resultó no estar justo al lado de los botones. $ (this) .parent() es el elemento externo para el cuadro de diálogo completo. – Altreus

3

Este hilo - jQuery UI confirmation dialog - manipulating output - parece proporcionar una opción más limpia, que debe ejecutarse más rápido que un hallazgo.

$('.ui-dialog-buttonpane').children('button')[1] 

me quedé atrapado tratando de usarlo en un primer momento, pero tengo trabajo después de notar que esto no va a devolver un objeto jQuery DOM; devuelve el html, por lo que debe pegarlo dentro de un operador jquery para usarlo. Por ejemplo -

var button1 = $('.ui-dialog-buttonpane').children('button')[1]; 
$(button1).removeClass('ui-button-text-only').addClass('ui-button-text-icon'); 
+0

más 1 para velocidad – nolabel

+2

También puede usar $ ('. Ui-dialog-buttonpane'). Children ('botón'). Eq (1) para tenerlo como un objeto jquery –

Cuestiones relacionadas