2009-07-16 15 views
47

Używam okna dialogowego jquery ui w mojej aplikacji. Jak inaczej ustawić przyciski "Zapisz" i "Anuluj" w oknie dialogowym jquery? "Zapisz" jest bardziej atrakcyjne niż "Anuluj". Mogę użyć hiperłącza do "Anuluj", ale jak mogę umieścić to w tym samym panelu przycisków?okno dialogowe jquery zapisz przycisk anulowania stylizacja

+0

Mówisz o typowym oknie dialogowym JavaScript (np. Rodzaju, który otrzymasz od wezwania())? Ponieważ nie można ich stylizować. Najlepiej jest użyć pewnego rodzaju nakładki modalnej dla jQuery (nie mogłem polecić takiego, jakiego nigdy nie używałem). – inkedmn

+4

Jak wspomniano we wpisie, używa okna dialogowego jQuery UI. – SolutionYogi

+0

To jest po prostu kwestia spojrzenia na elementy, które jQuery dodaje do strony i stylizacji na tej podstawie (lub przeczytaniu dokumentacji, która niewątpliwie obejmuje to - http://jqueryui.com/demos/dialog/#theming) – inkedmn

Odpowiedz

53

Oto jak dodać niestandardowych klas w jQuery UI Dialog (wersja 1.8+):

$('#foo').dialog({ 
    'buttons' : { 
     'cancel' : { 
      priority: 'secondary', class: 'foo bar baz', click: function() { 
       ... 
      }, 
     }, 
    } 
}); 
+3

Niestety, wygląda na to, że zmienili program milowy dla tej poprawki na 1.9. –

+3

prace klasy, zajęcia nie. po prostu dołączają wszelkie atrybuty, które umieszczasz w tym obiekcie do dom. – benstraw

+2

dodanie klasy faktycznie powoduje przerwanie js w IE8 i powoduje, że okno dialogowe nie działa. Jeśli użyjesz tego, wstawiaj apostrofy wokół klasy słów. A więc: priority: "secondary", "class": "foo bar baz", ... itd. –

-1

Sprawdziłem HTML wygenerowany przez okno dialogowe interfejsu użytkownika. Powoduje to wyświetlenie panelu przycisków:

<div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"> 
    <button type="button" class="ui-state-default ui-corner-all">Delete all items in recycle bin</button> 
    <button type="button" class="ui-state-default ui-corner-all different" style="border: 1px solid blue;">Cancel</button> 
</div> 

Dodanie klasy do przycisku Anuluj powinno być łatwe.

$ (".i-dialog-buttonpane: last-child"). Css ("kolor tła", "#ccc");

Spowoduje to mały szary przycisk Anuluj. Możesz stylizować ten przycisk, jak chcesz.

Powyższy kod zakłada, że ​​przycisk Anuluj jest ostatnim przyciskiem. Głupiec dowód sposób to zrobić byłoby

$('.ui-dialog-buttonpane :button') 
    .each(
     function() 
     { 
      if($(this).text() == 'Cancel') 
      { 
       //Do your styling with 'this' object. 
      } 
     } 
    ); 
4

po patrząc na some other threads wymyśliłem tego rozwiązania dodać ikony do przycisków w oknie dialogowym potwierdzenia, które wydaje się działać dobrze w wersji 1.8.1 i mogą być modyfikowane, aby zrobić inną stylistykę:

$("#confirmBox").dialog({ 
    modal:true, 
    autoOpen:false,   
    buttons: { 
     "Save": function() { ... },     
     "Cancel": function() { ... } 
     } 
}); 

var buttons = $('.ui-dialog-buttonpane').children('button'); 
buttons.removeClass('ui-button-text-only').addClass('ui-button-text-icon'); 

$(buttons[0]).append("<span class='ui-icon ui-icon-check'></span>"); 
$(buttons[1]).append("<span class='ui-icon ui-icon-close'></span>"); 

byłbym ciekaw, czy nie było lepiej w ay to zrobić, ale wydaje się to dość skuteczne.

+0

To działa w jquery-ui 1.8.9 – Ophiuchus

1

Ta funkcja doda klasę do każdego przycisku w twoim oknie dialogowym. Następnie można styl (lub wybierz z jQuery) jako normalny:

$('.ui-dialog-buttonpane :button').each(function() { 
    $(this).addClass($(this).text().replace(/\s/g,'')); 
}); 
7

Rozwiązania te są wszystko bardzo dobrze, jeśli masz tylko jedno okno na stronie w dowolnym czasie, jednak jeśli chcesz styl wielu okien dialogowych na raz spróbuj:

$("#element").dialog({ 
    buttons: { 
     'Save': function() {}, 
     'Cancel': function() {} 
    } 
}) 
.dialog("widget") 
.find(".ui-dialog-buttonpane button") 
.eq(0).addClass("btnSave").end() 
.eq(1).addClass("btnCancel").end(); 

Zamiast globalnie wybierając przyciski, to dostaje th Obiekt widgetu i znajduje jego okienko, a następnie indywidualnie wybiera każdy przycisk. Oszczędza to wiele bólu, gdy masz kilka okien dialogowych na jednej stronie:

40

W jQueryUI 1.8.9, używając className zamiast classes działa.

10

Od wersji jquery ui 1.8.16 poniżej jest jak to działa.

$('#element').dialog({ 
    buttons: { 
     "Save": { 
      text: 'Save', 
      class: 'btn primary', 
      click: function() { 
       // do stuff 
      } 
     } 
}); 
+2

Po prostu próbowałem użyć tego stylu i wygenerował błąd skryptu w IE 7,8 i 9. –

+1

Ja również doświadczyłem tego problemu i dodałem rozwiązanie w postaci odpowiedzi. – maxp

16

Używam jQuery UI 1.8.13 i następująca konfiguracja działa jak trzeba:

var buttonsConfig = [ 
    { 
     text: "Ok", 
     "class": "ok", 
     click: function() { 
     } 
    }, 
    { 
     text: "Annulla", 
     "class": "cancel", 
     click: function() { 
     } 
    } 
]; 

$("#foo").dialog({ 
    buttons: buttonsConfig 
// ... 

ps: pamiętać, aby owinąć „klasa” z cytatami bo to słowo zarezerwowane w js!

+1

co powiedział - klasa: działa, ale nie w starszych IE, gdzie "klasa": robi – derekcohen

11

Od czasu opublikowania tego pytania minęło trochę czasu, ale poniższy kod działa we wszystkich przeglądarkach (zauważ, że odpowiedź MattPII działa w FFox i Chrome, powoduje błędy skryptów w IE).

$('#foo').dialog({ 
    autoOpen: true, 
    buttons: [ 
    { 
     text: 'OK', 
     open: function() { $(this).addClass('b') }, //will append a class called 'b' to the created 'OK' button. 
     click: function() { alert('OK Clicked')} 
    }, 
    { 
     text: "Cancel", 
     click: function() { alert('Cancel Clicked')} 
    } 
    ] 
}); 
+1

Dzięki! Działa dla mnie w wersji 1.8.23, ale niektóre ze starszych odpowiedzi na starsze wersje nie mogłem dostać do pracy. – Jagd

+0

bardzo dobrze, rozwiązał moje problemy. –

2

musiałem użyć następujących skonstruować w jQuery UI 1.8.22:

var buttons = $('.ui-dialog-buttonset').children('button'); 
buttons.removeClass().addClass('button'); 

Usuwa formatowanie i stosuje stylizacji zastępczy w razie potrzeby.
Działa w większości głównych przeglądarek.

1

Mam wersję JQuery UI 1.8.11 i to jest mój działający kod. Możesz także dostosować jego wysokość i szerokość w zależności od wymagań.

$("#divMain").dialog({ 
    modal:true, 
    autoOpen: false, 
    maxWidth: 500, 
    maxHeight: 300, 
    width: 500, 
    height: 300, 
    title: "Customize Dialog", 
     buttons: { 
      "SAVE": function() { 
       //Add your functionalities here 
      }, 
      "Cancel": function() { 
       $(this).dialog("close"); 
      } 
     }, 
     close: function() {} 
}); 
Powiązane problemy