2012-07-03 19 views
5

Jak dodać identyfikator do określonego okna dialogowego? Chcę po prostu zastosować oddzielny styl dla każdego okna i spróbować zrobić to tak:JQuery UI dodać identyfikator do okna dialogowego

var $order_dialog = $("<%= escape_javascript(render('order_mini_site_form', :layout => false)) %>"); 

var current_dialog = $order_dialog.dialog({ 
    width: 515, 
    height: 575, 
    modal: true, 
    resizable: false, 
    draggable: false, 
    title: false, 
    autoOpen: true, 
    closeOnEscape: false, 
    buttons: [ 
    { text: "Отправить запрос" , click: function() { $(this).find('form').submit(); $(this).dialog('close'); } }, 
    { text: "Отмена", click: function() { $(this).dialog('close'); } } 
    ] 
}).parent().find('.ui-dialog-titlebar').remove(); 


$current_dialog.attr('id', 'awesome_dialog'); 

ale okno utworzone wewnątrz znacznika body bez identyfikatora i nie mogę zastosować styl dla niego.

Odpowiedz

7

Jeśli Twoim celem jest użycie tego identyfikatora w css, możesz to osiągnąć przy pomocy klasy css.

Opcja dialogClass pozwala określić klasę, która zostanie zastosowana w oknie dialogowym. Następnie możesz użyć tej klasy w selektorach, aby zastosować inny styl dla określonego okna dialogowego.

+1

staram klasę i to działa na mnie. Dzięki. Identyfikator jest jednak moim zdaniem lepszy - ma wyższy priorytet niż selektor klasy. Dlatego szukam możliwości dodania identyfikatora. – Vladimir

+0

Tak, ale ponieważ interfejs API nie zapewnia niczego dla identyfikatora, musisz użyć klasy lub zhakować. Jeśli absolutnie potrzebujesz identyfikatora, możesz użyć następującego hacka (ale jest trochę brudny). Zaraz po otwarciu okna możesz usunąć klasę i dodać identyfikator. $ ("twoja klasa"). removeClass ("twoja klasa"). attr ("id", "twoja-id"). Jednak myślę, że przyczyna "brudności" poprzez użycie klasy, w której chcesz, aby ID spadło mniej niż ten straszny hack. Zawsze możesz zwiększyć priorytet reguły, powtarzając całą regułę swoją klasą. –

1

Problem w twoim przykładowym kodzie polega na tym, że dodajesz id do wyniku .find('.ui-dialog-titlebar').remove() zamiast samego okna dialogowego. Poniższe powinny działać dla Ciebie.

var $order_dialog = $("<%= escape_javascript(render('order_mini_site_form', :layout => false)) %>"); 

var current_dialog = $order_dialog.dialog({ 
    width: 515, 
    height: 575, 
    modal: true, 
    resizable: false, 
    draggable: false, 
    id: "ololo", 
    title: false, 
    autoOpen: true, 
    closeOnEscape: false, 
    buttons: [ 
    { text: "Отправить запрос" , click: function() { $(this).find('form').submit();    $(this).dialog('close'); } }, 
    { text: "Отмена", click: function() { $(this).dialog('close'); } } 
    ] 
}) 

$current_dialog.parent().find('.ui-dialog-titlebar').remove(); 
$current_dialog.attr('id', 'awesome_dialog'); 
+0

A jak to zrobić poprawnie? – Vladimir

+0

Istnieje wiele opcji. Osobiście uwzględniłbym "id" w samym HTML, w twoim przypadku na 'order_mini_site_form'. Można również użyć klasy CSS według opcji 'dialogClass', o której mowa w innym przypadku. Jako ostatnia opcja, jeśli masz tylko jedno okno dialogowe na stronie, możesz po prostu użyć interfejsu jQuery klasy "ui-dialog" już wstawia okno dialogowe. Na przykład 'ui-dialog {kolor: żółty; } 'sprawi, że cały tekst w oknie dialogowym będzie żółty. –

9

Trochę późno, ale jest to w jaki sposób można to zrobić:

$('#placeholderId').dialog('widget').attr('id', 'dialogId'); 

$ ('# placeholderId') dialog ('widget') daje otaczającej <. div > okna dialogowego, które jest najprawdopodobniej elementem, na którym chcesz ustawić ID.

+1

Uważam, że INSANE, że okno dialogowe jquery nie ma opcji dodawania klasy/id do rodzica. Mam na myśli, kompletnie szalony. Również szalony jest fakt, że okna dialogowe nie mają kontenera (z wyjątkiem zewnętrznego kontenera) dla tytułu i zawartości div ... –

+0

Najlepszym sposobem, aby to zrobić. –

0

Nie zgadzam się z głosowaną odpowiedzią (a nie osobistym atakiem, nie zgadzam się z częścią "brudne włamanie"). Jest prawdą, że nie ma opcji ID dla okna dialogowego jquery, ale jeśli dojdziesz do wniosku, że identyfikator jest konieczny, poniższy kod powinien wystarczyć. Mój przewodnik po JS, który rozwijam, bardzo potrzebował takiego identyfikatora.

// Tutaj mam deklarowania dynamicznie wstawionego treści [np co tworzę], aby mieć identyfikator z tempstep, to będą wykorzystane przy wywołaniu poniżej, aby dodać identyfikator do jQuery Dialog Box

Kod: jQuery ('<div id="tempstep"></div>').dialog({

Kod: jQuery('#tempstep').parent().attr("id","dialogBox");

Powiązane problemy