2009-12-01 12 views
69

Así que tengo actualmente un cuadro de diálogo jQuery con dos botones: Guardar y cerrar. Creo el diálogo usando el siguiente código:Aplicar CSS para jQuery diálogo Botones

$dialogDiv.dialog({ 
    autoOpen: false, 
    modal: true, 
    width: 600, 
    resizable: false, 
    buttons: { 
     Cancel: function() { 
         // Cancel code here 
     }, 
     'Save': function() { 
         // Save code here 
     } 
    }, 
    close: function() { 
     // Close code here (incidentally, same as Cancel code) 
    } 
}); 

Sin embargo, ambos botones son del mismo color cuando se utiliza este código. Me gustaría que mi botón Cancelar sea de un color diferente al de Guardar. ¿Hay alguna manera de hacer esto usando algunas opciones jQuery integradas? No obtuve mucha ayuda de la documentación.

Tenga en cuenta que el botón Cancelar que estoy creando es un tipo predefinido, pero en 'Guardar' estoy definiendo mi mismo. No estoy seguro de si eso tendrá alguna relación con el problema.

Cualquier ayuda sería apreciada. Gracias.

ACTUALIZACIÓN: consenso era que había dos caminos a recorrer aquí:

  1. Inspeccionar el HTML usando un plugin de Firefox como firebug y observe las clases CSS que jQuery es aplicar a los botones , y toma una puñalada para anularlos. Nota: en mi HTML, ambos botones se utilizaron las mismas exactas clases CSS y no hay identificadores únicos, por lo que esta opción estaba fuera.
  2. Use un selector jQuery en el cuadro de diálogo abrir para capturar el botón que yo quería, y añádale una clase CSS.

Fui con la segunda opción, y se utiliza el jQuery método find() ya que creo que es más apropiado que el uso de: primer o: first-child no b/c el botón que quería cambiar era necesariamente el primer botón enumerado en el marcado. Usando find, puedo simplemente especificar el nombre del botón y agregar CSS de esa manera. El código que terminó con está por debajo de:

$dialogDiv.dialog({ 
    autoOpen: false, 
    modal: true, 
    width: 600, 
    resizable: false, 
    buttons: { 
     Cancel: function() { 
         // Cancel code here 
     }, 
     'Save': function() { 
         // Save code here 
     } 
    }, 
     open: function() { 
      $('.ui-dialog-buttonpane').find('button:contains("Cancel")').addClass('cancelButtonClass'); 
     } 
    close: function() { 
     // Close code here (incidentally, same as Cancel code) 
    } 
}); 

Respuesta

115

estoy reposting my answer a una pregunta similar, porque nadie parece haberse dado aquí y es mucho más limpio y más ordenado:

Utilice la sintaxis buttons propiedad alternativa:

$dialogDiv.dialog({ 
    autoOpen: false, 
    modal: true, 
    width: 600, 
    resizable: false, 
    buttons: [ 
     { 
      text: "Cancel", 
      "class": 'cancelButtonClass', 
      click: function() { 
       // Cancel code here 
      } 
     }, 
     { 
      text: "Save", 
      "class": 'saveButtonClass', 
      click: function() { 
       // Save code here 
      } 
     } 
    ], 
    close: function() { 
     // Close code here (incidentally, same as Cancel code) 
    } 
}); 
+11

Parece que con las nuevas versiones de jQuery UI (o jQuery, no puedo decirlo), puede haber cambiado la clave para las clases adicionales de 'className' a' "class" '. –

+0

En la versión> jqueryui 1.8. existe clase no className. – kajo

+2

@RaphaelSchweikert - Esto generará un error de script en IE7/8/9; consulte la solución aquí: http://www.stackoverflow.com/questions/1138291/jquery-dialog-save-cancel-button-styling/10415919# 10415919 – maxp

1

¿Por qué no inspeccione el marcado generado, tenga en cuenta la clase en el botón de elección y el estilo por sí mismo?

+1

-1, el marcado generado no es único –

+0

No proporcionó el marcado. Mi respuesta fue escrita un par de horas antes de su actualización, donde especifica ese hecho. – rfunduk

3

Tal vez algo como esto?

$('.ui-state-default:first').addClass('classForCancelButton'); 
6

creo que hay dos maneras de manejar que:

  1. Comprobar el uso de algo como Firebug si hay una diferencia (en clase, identificación, etc.) entre los dos botones y el uso que se para abordar el botón específico
  2. usar algo como: first-child para seleccionar, por ejemplo, el primer botón y el estilo que uno diferente

Cuando miro a la fuente con Firebug para uno de mis diálogos, resulta algo así como:

<div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"> 
    <button class="ui-state-default ui-corner-all ui-state-focus" type="button">Send</button> 
    <button class="ui-state-default ui-corner-all" type="button">Cancel</button> 
</div> 

por lo que podría, por ejemplo, abordar el botón Enviar mediante la adición de algunos estilos de .ui por el estado de enfoque (tal vez con algunos selectores adicionales para asegurarse de que yo anulación los estilos de jquery).

Por cierto, Me va por la segunda opción, en este caso para evitar problemas cuando el foco cambia ...

+0

para agregar a la solución el estado de enfoque del botón. – Chris22

0

sugiero que eche un vistazo en el que el código HTML escupe y ver si Hay una forma de identificar de forma única uno (o ambos) de los botones (posiblemente los atributos id o name), luego use jQuery para seleccionar ese elemento y aplicarle una clase css.

13

Usted puede utilizar el controlador de eventos abiertos al aplicar un estilo adicional:

open: function(event) { 
    $('.ui-dialog-buttonpane').find('button:contains("Cancel")').addClass('cancelButton'); 
} 
3

Seleccione el div que tiene función de diálogo a continuación, obtener los botones apropiados en ella y establecer el CSS.

$("div[role=dialog] button:contains('Save')").css("color", "green"); 
$("div[role=dialog] button:contains('Cancel')").css("color", "red"); 
+0

otras respuestas diciendo que usar la opción de diálogo 'abrir' no funcionó para mí (aunque el selector que estaba usando era correcto si se usa después de que se abrió el diálogo), pero esto sí. –

4

Debe cambiar la palabra "className" para "clase"

buttons: [ 
    { 
     text: "Cancel", 
     class: 'ui-state-default2', 
     click: function() { 
      $(this).dialog("close"); 
     } 
    } 
], 
+4

usando 'clase: 'ui-state-default2'' podría causar problemas con el navegador ya que' clase' es una palabra clave en algunas versiones de JavaScript ([para referencia] (https://developer.mozilla.org/es/JavaScript/ Reference/Reserved_Words # Words_reserved_for_possible_future_use)). Use '" clase ": en su lugar 'ui-state-default2''. – sinemetu1

0

If Todavía señalando que está trabajando para agregar los siguientes estilos en la hoja de estilo de página

.ui-widget-content .ui-state-default { 
    border: 0px solid #d3d3d3; 
    background: #00ACD6 50% 50% repeat-x; 
    font-weight: normal; 
    color: #fff; 
} 

Se va a cambiar el color de fondo de los botones de diálogo.

2

También hay una respuesta simple para definir los estilos específicos que sólo se van a aplicar a ese botón específico y que puede tener Jquery declarar estilo de elemento cuando se declara el diálogo:

id: "button-delete", 
text: "Delete", 
style: "display: none;", 
click: function() {} 

después de hacer eso aquí es lo que muestra el html: enter image description here

haciendo esto le permite configurarlo, pero no es necesariamente fácil de cambiar usando jquery más adelante.

Cuestiones relacionadas