2012-07-03 14 views
5

IDを特定のダイアログに追加するにはどうすればよいですか?JQuery UIダイアログにIDを追加

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'); 

が、ダイアログIDなしでbodyタグ内に作成し、私はそれのためにスタイルを適用カント: は、私はちょうど各ダイアログのために別々のスタイルを適用し、このようにそれをやってみたいです。

答えて

7

あなたの目標が単にcssでこのIDを使用する場合は、代わりにcssクラスを使用してこれを達成できます。

dialogClassオプションを使用すると、ダイアログに適用されるクラスを指定できます。このクラスをセレクタで使用すると、特定のダイアログに異なるスタイルを適用できます。

+1

私はクラスを試してみて、それが私のために働いています。ありがとう。しかし、IDは私の意見では良いです - それはクラスセレクターよりも優先順位が高いです。なぜIDを追加する能力を探しているのですか? – Vladimir

+0

ええ、APIはIDに何も提供していないので、クラスを使用するかハックする必要があります。 IDが絶対に必要な場合は、次のハックを使用することができます(ただし、少し汚れています)。ポップアップを開いた直後に、クラスを削除してIDを追加することができます。 $( "。your-class")。removeClass( "。your-class")。attr( "id"、 "your-id")。しかし、私はIDを欲しいクラスを使って "汚さ"を引き起こすのは、この恐ろしいハックよりも傷つきにくいと思う。クラス全体のルールを繰り返すことで、ルールの優先順位を常に上げることができます –

1

例コードの問題は、idをダイアログ自体の代わりに.find('.ui-dialog-titlebar').remove()の結果に追加することです。以下はあなたのために働くはずです。

少し遅れ
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

これはどのように正しく行われるべきですか? – Vladimir

+0

多くのオプションがあります。私は個人的に 'id_'をHTMLの中に入れます。あなたの場合は' order_mini_site_form'です。また、別の回答者として、 'dialogClass'オプションごとにCSSクラスを使用することもできます。最後のオプションとして、ページ上に1つのダイアログしかない場合、 'ui-dialog'クラスを使用することができます。jQuery UIはすでにダイアログを表示しています。たとえば、 'ui-dialog {color:yellow; } 'は、ダイアログのすべてのテキストを黄色にします。 –

9

が、これはそれを行うことができる方法である:。

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

$( '#のplaceholderId')をダイアログ( 'ウィジェット')はあなたの周囲の<を与えますダイアログのdiv >。これは、IDを設定する要素である可能性が最も高いです。

+1

jqueryダイアログに、クラス/ IDを親に追加するオプションがないというINSANEが見つかりました。私は完全に狂っている。また、事実上のダイアログボックスには、タイトルとコンテンツのdivのコンテナ(外部コンテナを除く)がありません。 –

+0

これを行うための最良の方法です。 –

0

私は投票された回答に同意しません(個人的な攻撃ではなく、「汚れたハック」の部分には同意しません)。彼は、jqueryダイアログボックスのIDオプションがないという事実は真ですが、IDが必要であるという結論に達すると、次のコードで十分です。私がツアーしているツアーガイドJSは、このようなIDが大変必要でした。

//ここで私はtempstepのIDを持っている[私が作成しています何等]動的に挿入されたコンテンツを宣言しています、これはjQueryのダイアログボックス

にIDを追加するには、以下の呼び出しで使用されます

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

コード:jQuery('#tempstep').parent().attr("id","dialogBox");

関連する問題