• 締切済み

jqueryuiのdialog

複数指定したいのですが簡単な方法ってありますでしょうか? 具体的には基本的な設定は全ダイアログで共通なのですがbuttonsの設定をそれぞれで変えたく思っています。 想定のパターンとしては以下の通りです。 ・OkとCancelボタン ・Okボタン ・ボタンなし 単純に必要な分だけ同様に加えればできるかと思うのですがあまりにも単調な気が・・・ 現在のhtmlとjsは以下の通りです。詳しい方がいらっしゃいましたら宜しくお願い致します。 <a href="#" id="dialog_link">Open Dialog</a> <div id="dialog" title="title">内容</div> // Dialog $('#dialog').dialog({ autoOpen: false, buttons: { "Ok": function() { //処理 }, "Cancel": function() { //処理 } } }); // Dialog Link $('#dialog_link').click(function(){ $('#dialog').dialog('open'); return false; });

みんなの回答

noname#94983
noname#94983
回答No.3

あー、細かいところで書き間違いがいくつかあるが、とりあえず以下で動くと思う。 // Dialog function showDlg(n){ var open; var size; var btns; switch(n){ case 0: open = false, size = 400, btns = {}; break; case 1: open = true, size = 500, btns = { "Ok":function(){ $(this).dialog("close"); } }; break; case 2: open = false, size = 600, btns = { "Ok":function(){ $(this).dialog("close"); }, "Cancel":function(){ $(this).dialog("close"); } }; break; } $('#dialog').dialog({ autoOpen: open, width: size, modal: true, buttons: btns }); $('#dialog').dialog('option', 'autoOpen', true); $('#dialog').dialog('option', 'width', size); $('#dialog').dialog('option', 'buttons', btns); $('#dialog').dialog('open'); } $(document).ready(function(){ // Dialog Link $('#dialog_link0').click(function(ev){ showDlg(0); // ボタンなしで表示 return false; }); $('#dialog_link1').click(function(ev){ showDlg(1); // "ok"ボタンを表示 return false; }); $('#dialog_link2').click(function(ev){ showDlg(2); // "ok","cancel"ボタンを表示 return false; }); }); まだ読み込んでないタグのDOMを利用した初期化処理は、$(document).readyでやらないとうまく機能しないので注意。他は、だいたいケアレスミスなのでよく見てほしい。

全文を見る
すると、全ての回答が全文表示されます。
noname#94983
noname#94983
回答No.2

>箇所のみautoOpenをtrueにしたく以下のように設定してみましたがうまくいきません。 >このような事をする場合どうすればいいのでしょうか? そのような場合には、 dialog('option',属性,値) こんな感じで呼び出して、明示的にプロパティの値を変更すればいいと思う。dialog('option','autoOpen',true)とかで修正できるはず。(今、ちと手元に環境がないので試してないが)

dcx147
質問者

補足

ご丁寧にお返事頂きありがとうございます。 最初のサンプルの見よう見まねではありますが以下のように設定したところjsが機能しなくなってしまいました。 // Dialog function showDlg(n){ var open; var size; var btns; switch(n){ case 0: open: false, size: 400, btns = {}; break; case 1: open: true, size: 500, btns = { "Ok":function(){ $(this).dialog("close"); } }; break; case 2: open: false, size: 600, btns = { "Ok":function(){ $(this).dialog("close"); }, "Cancel":function(){ $(this).dialog("close"); } }; break; } $('#dialog').dialog({ autoOpen: open, width: size, modal: true, buttons: btns }); $('#dialog').dialog('option', 'autoOpen', open); $('#dialog').dialog('option', 'width', size); $('#dialog').dialog('option', 'buttons', btns); $('#dialog').dialog('open'); } // Dialog Link $('#dialog_link0').click(function(){ showDlg(0); // ボタンなしで表示 return false; }); $('#dialog_link1').click(function(){ showDlg(1); // "ok"ボタンを表示 return false; }); $('#dialog_link2').click(function(){ showDlg(2); // "ok","cancel"ボタンを表示 return false; }); また、気になる事があるのですかた上記からsizeの定義を全て外すと動作するのですがダイアログに 表示する内容が最初から表示されてしまいます。 ※一度ダイアログを開いて閉じると表示されなくなるようです <div id="dialog" title="title" style="display: none;"> ダイアログの内容 </div> としdisplay: none;を入れるとひとまず解決できるのですがデモでは表示されなかったので どうにかならないものかと。。。

全文を見る
すると、全ての回答が全文表示されます。
noname#94983
noname#94983
回答No.1

つまり、呼び出す際に、表示するボタンなどをカスタマイズして表示できるようにしたい、ということだろうか。ならば、表示する前に必要な設定を行えばいい。 function showDlg(n,msg){ var btns; switch(n){ case 0: btns = {}; break; case 1: btns = {"Ok":function(){alert('ok');$(this).dialog("close");}}; break; case 2: btns = {"Ok":function(){alert('ok');$(this).dialog("close");},"Cancel":function(){alert('cancel');$(this).dialog("close");}}; break; } $('#dialog').text(msg); $('#dialog').dialog({modal:true,buttons:btns}); $('#dialog').dialog('option','buttons',btns); $('#dialog').dialog('open'); } 例えば、こんな感じで、ダイアログを呼び出す際の設定などを行ってから表示するように調整しておく。この場合だと、 showDlg(0,'テスト0'); // ボタンなしで表示 showDlg(1,'テスト1'); // "ok"ボタンのみ表示 showDlg(2,'テスト2'); // "ok","cancel"ボタンを表示 こんな具合に表示するボタンとメッセージを設定できる。

dcx147
質問者

お礼

お返事ありがとうございます。 説明不足なようでしたが思い通りの事ができました!1つ質問なのですがOKボタンのみを表示する 箇所のみautoOpenをtrueにしたく以下のように設定してみましたがうまくいきません。 このような事をする場合どうすればいいのでしょうか? function showDlg(n, msg){ var btns; var open; switch(n){ case 0: open: false, btns = {}; break; case 1: open: false, btns = { "Ok":function(){ $(this).dialog("close"); } }; break; case 2: open: true, btns = { "Ok":function(){ $(this).dialog("close"); }, "Cancel":function(){ $(this).dialog("close"); } }; break; } $('#dialog').text(msg); $('#dialog').dialog({ autoOpen: open, buttons:btns }); $('#dialog').dialog('option', 'buttons', btns); $('#dialog').dialog('open'); } $('#dialog_link').load(function(){ showDlg(1); // "ok"ボタンを表示 return false; });

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jQueryのUIのDialogでページ遷移

    jQueryのUIのDialogを使用してログイン画面を作成しています。 http://stacktrace.jp/jquery/ui/widgets/dialog.html 何とかjQueryのUIのDialogを使用してログイン画面を表示する事ができましたが... 下記がソースコードです。 $(document).ready(function(){   $("#dialog:ui-dialog").dialog("destroy");   $("#dialog-form").dialog({     autoOpen: false,     height: "auto",     width: 350,     modal: true,     buttons: {       "ログイン": function() {         ↑       ここに記述         ↓       }     }   }); $("#dialog-form").dialog("open"); }); <DIV id="dialog-form" title="ログイン"> <FORM method="post" action="login.php"> <FIELDSET> <LABEL for="username">ユーザ名</LABEL> <INPUT type="text" name="txtUsername" id="username" class="text ui-widget-content ui-corner-all" /> <LABEL for="password">パスワード</LABEL> <INPUT type="password" name="txtPassword" id="password" value="" class="text ui-widget-content ui-corner-all" /> </FIELDSET> </FORM> </DIV> 行いたい事は下記の通りです。 1.各テキストボックスの入力チェック 2.OKの場合はページ遷移(login.php)して  ※login.htmlで入力された値(ユーザ名、パスワード)をlogin.phpに受け渡す。 3.入力エラーの場合はエラーダイアログを表示。  エラーダイアログのOKボタンをクリックして再度、ログイン入力。 箇条書きで申し訳ありませんがどのように記述すればいいのでしょうか。 また上記の処理を実現するのに参考になるサイトがありましたら教えて下さい。 情けないんですがここ1週間、これで悩んでいます。 藁をもつかむ思いで... 些細な事でも何でも構いませんので宜しくお願いします。

  • jQueryUIでダイアログ作成について

    OKとキャンセルの確認ダイヤログを作成したいです。 <script> $(function() { $( "#dialog-confirm" ).dialog({ resizable: false, draggable:false, closeOnEscape:false, width:500, height:400, modal: true, buttons: { "Yes": function() { $( this ).dialog( "close" ); }, No: function() { window.location.href='http://www.yahoo.co.jp/' } } }); }); </script> 上記コードで動くのですが、 modal: true, これでダイヤログが出た時に半透明になりますよね。 これを半透明ではなく、不透明、背景がすけないようにしたいのですが、 可能でしょうか。 可能ならばやり方を教えて頂きたくよろしくお願い致します。

  • JAVA DialogのModalの設定について

    DialogのModalの設定変更で悩んでいます。 以下にサンプルソース(文字数制限のため、不要部分を大幅カットしています)を記します。 このサンプルは、はじめModalをfalseに設定したDialogを表示し、親Frame上の"Change Modal"を押すと5秒間DialogのModalがtrueに変わり、親Frameへのアクセスをガードします。その後、Modalを再度falseに切り替え、はじめの状態へ戻すことを目的とするものなのですが、最後の処理がうまくいきません(親Frameへのアクセスがガードされっぱなしになってしまう)。 何がいけないのでしょうか? [sample] class Modal_Test_Sample extends Frame implements Runnable, ActionListener { Dialog test_dialog; Thread thread, owner_thread; Button modal_change; Modal_Test_Sample() { super("test_frame"); modal_change = new Button("model_change"); modal_change.addActionListener(this); add(modal_change) pack(); test_dialog = new Dialog(this,"test_dialog",false); test_dialog.show(); } public void actionPerformed(ActionEvent ae) { owner_thread = Thread.currentThread(); thread = new Thread(this); thread.start(); test_dialog.setModal(true); test_dialog.setVisible(false); test_dialog.setVisible(true); test_dialog.setModal(false); test_dialog.setVisible(false); test_dialog.setVisible(true); } public void run() { try { thread.sleep(5000); } catch(Exception e) { } owner_thread.interrupt(); } public static void main(String args[]) { (new Modal_Test_Sample()).show(); } }

    • ベストアンサー
    • Java
  • プロパティーシートでOKボタンを押しても終わらなくするには?

    VC++ Ver6.0  プロパティーシートを使用した場合に自動で表示されるOK、キャンセルのボタンで、OK処理を実行した時は継続して処理を行う事はできないのでしょうか? キャンセル処理だけ終わるようにしたいのです。 BOOL CTESTApp::InitInstance() { AfxEnableControlContainer(); //省略 CPSheet Dialog("テストタイトル"); m_pMainWnd = &Dialog; if (Dialog.DoModal() == IDOK) { // [OK]が押されたときの処理 //処理後は、次のイベント待ちにしたい・・・ } else if (Dialog.DoModal() == IDCANCEL) { // [キャンセル]が押されたときの処理 //何もせず終了する(現状のまま) } return FALSE; }

  • javascriptについて教えてください。

    divのボタンを作りたいと思い、調べながらjQueryを使う方法は以下のようにしたらいい事は分かったのですが、jQueryを使わずにしようと思い $(function(){ $("div").click(function(){ var x = this.id; alert(x); }); }); の部分を document.getElementsByTagName("div").onclick = function(){ var x = this.id;  alert(x); }; としてみたのですが、うまくいきません。jQueryを使わずに同じようなボタンを作るにはどうしたらいいのでしょうか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js"></script> <script type="text/javascript" language="javascript"> $(function(){ $("div").click(function(){ var x = this.id; alert(x); }); }); </script> </head> <body> <div id="aaa" class="div_link">a</div> <div id="bbb" class="div_link">b</div> <div id="ccc" class="div_link">c</div> <div id="ddd" class="div_link">d</div> <div id="eee" class="div_link">e</div> </body> </html>

  • jauery ui dialog 読み込んだ外部htmlファイル内での

    jauery ui dialog 読み込んだ外部htmlファイル内でのjqueryの実行 お世話になります。 iwatuturuturu と申します。 jqueryで読み込んだ外部htmlファイル内でのjqueryのセレクターを使用した装飾等ができません。 [index.html]にてjqueryのloadを使用し、同じ階層内の[text.html]のファイルを読み、それをjQuery uiを使用したdialogで表示させています。 読み込まれたdialog内の要素に装飾を行ないたいと考えておりますが、下記のソースにあります[$("p").css("background-color", "red");]が読み込まれたタイミングで、[$("p")]が読み込まれていない為か背景色の変更が行えません。(jqueryを使用し、テーブルの行を一行毎に色付けをしたりしたいのでこのような質問にしました。) loadなどで外部ファイルを読み込んで、読み込まれた要素にjqueryによる装飾や操作を行いたい場合はどのようなやり方があるのでしょうか? 【ソース[index.html]】------------------------ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link type="text/css" href="../css/common/jquery-ui-1.8.4.custom.css" rel="stylesheet" /> <script type="text/javascript" src="../js/jquery.js"></script> <script type="text/javascript" src="../js/jquery-ui.js"></script> <script type="text/javascript"> $(function(){ $("button").click(function(){ /* dialogを読み込む領域を作成 */ $("body").append("<div id='dialog_window'></div>"); /* loadで外部htmlファイルの読み込み */ $("div#dialog_window").load("text.html"); /* loadで読み込まれたhtmlファイルをdialogとして表示 */ $("div#dialog_window").dialog({ autoOpen: true, width: 1100, }); /* dialog内の装飾 */ $("p").css("background-color", "red"); }); }); </script> </head> <body> <button>ウィンドウopen</button> </div> </body> </html> 【ソース[text.html]】------------------------ <p>読み込み完了</p> ------------------------------------ よろしくお願いいたします。

  • jQuery膨らむボタン。同一ウィンドウにリンク

    http://jquery.malsup.com/hoverpulse/anchor.html ↑これを参考にjQueryでマウスを上にのせると膨らむボタンを作ったのですがクリックするとリンク先が別タブで開かれてしまいます。 同一のウィンドウ(HTMLでいうTARGET="_self")でリンク先を表示させたいのですがどうしたらいいですか? $(document).ready(function() { $('div.thumb img').hoverpulse().each(function() { var $img = $(this); var link = $img.attr('data-link'); $img.attr('title','Goto: ' + link); $img.click(function() { window.open(link); return false; }); }); }); <div id="thumbs"><div class="thumb"> <img src="img.jpg" data-link="http://google.com" /> </div></div>

  • AutoLISPにて ラジオボタンを使用したDC…

    AutoLISPにて ラジオボタンを使用したDCLの作成方法について お世話になります。 LISP+DCLにてラジオボタンを使用したダイアログボックスを作成しようと考えています。 ラジオボタンの値の取得方法がわからず困っています。 下記がコードです プログラムは、選択したラジオボタンの値を OKボタンを押すとPrincで画面に表示するだけのものです。 以下がDCLのコードです radio :dialog{label= "Radio Button DCL"; :radio_column{label="ラジオテスト";key="radiocolumn"; :radio_button{label="その1"; mnemonic="A";key = "A";value="1"; } :radio_button{label="その2"; mnemonic="B";key = "B"; } :radio_button{label="その3"; mnemonic="C";key = "C"; } } : boxed_row { : button { key = "accept"; label = "OK"; is_default = true; } : button { key = "cancel"; label = "Cancel"; is_default = false; is_cancel = true; } } } 以下がLISPコードです。 (defun c:radio () (setq dcl_id (load_dialog "radio.dcl")) (if (not (new_dialog "radio" dcl_id)) (exit) ) (set_tile "radiocolumn" radio_value) (action_tile "A" "(setq d_mode "1")") (action_tile "B" "(setq d_mode "2")") (action_tile "C" "(setq d_mode "3")") ;;;--- If an action event occurs, do this function (action_tile "accept" "(ddd)(done_dialog)") (action_tile "cancel" "(done_dialog)(EXIT)") (start_dialog) (unload_dialog dcl_id) ) (princ ddd() (princ "\n ラジオボタンの値は=")(princ d_mode); (princ "\n The user pressed Okay!") )

  • JSONのプロパティ名に変数を使用したい

    JSONのプロパティ名を動的に変更したく、以下のようなコードを書いたのですが エラーでした。 var caption = "test"; var jsonSampl = { caption : "abc" }; (captionではなく、"test"というプロパティ名が欲しいのです。。) 何か方法はありますでしょうか? ※JQueryのコードで以下の"OK"部分を変数で変えたいのです。。 このプロパティがそのまま表示されるので・・。 $("<div>テスト</div>").dialog({ buttons: { "OK": function() { $(this).dialog("close"); $(this).remove(); } } }) よろしくお願いします。

  • 全部のサイコロをjavascriptで動かしたい。

    たくさんのサイコロを画面が切り替わったと同時に出てきて、サイコロが全部ランダムに違う数字になって出てくるようにしたいのですが、HTML文の <li><img class="simap" src="img/MAP.png"/><img src="sai1.png" class="saikoro" name="saikoro"></li>の行が1個だったら、画面が切り替わるとちゃんとランダムに数字が変わるうようになり、何も問題ないのですが、 この行が2行以上になると、ランダムになるはずなのに、なぜかなりません。 毎回サイコロの目は1です。 どうしてランダム機能がちゃんと機能しないのか、 どう修正すればいいのか、 アドバイスお願いします。 *****************HTML文********************* <html> <head> <link rel="stylesheet" href="daisu.css" type="text/css"/> <script src="daisu.js"></script> <title>ダイス戦略</title> </head> <body> <div id="title"> <p>ああああ</p> <p><button id="btn_gamennkirikae" type="button">あああ</button></p> </div> <div id="gamegamenn"> <p><button id="btn_hitori" type="button">ああああ</button></p> </div> <div id="map"> <ul id="sima"> <li><img class="simap" src="img/MAP.png"/><img src="sai1.png" class="saikoro" name="saikoro"></li> **********ここ*********************************** </ul> </div> <body> </html> ******************CSS文******************** #title{ width:1200px; height:800px; border:4px solid gray; text-align:center; margin-top:70px; margin-left:auto; margin-right:auto; } #gamegamenn{ width:1200px; height:800px; border:4px solid gray; text-align:center; margin-top:70px; margin-left:auto; margin-right:auto; } button#btn_gamennkirikae{ width: 150px; height: 50px; margin-top:300px; } #map{ width:1200px; height:800px; border:4px solid gray; text-align:center; margin-top:70px; margin-left:auto; margin-right:auto; } #map li{ float:left; list-style-type: none; margin-left:-50px; } #map img{ } #sima{ float:left; margin-left:50px; } .saikoro{ width:50px; height:50px; position:relative; right:80px; bottom:25px; } .simap{ } *****************JS文********************* window.addEventListener('load',initGame,false); function initGame(){ var dialog = document.querySelector('#title'); dialog.style.display='block'; var dialog =document.querySelector('#gamegamenn'); dialog.style.display='none'; var dialog =document.querySelector('#map'); dialog.style.display='none'; var btn =document.querySelector('#btn_gamennkirikae'); btn.addEventListener('click',gamegamenn,false); } function gamegamenn(){ var dialog = document.querySelector('#title'); dialog.style.display='none'; var dialog =document.querySelector('#gamegamenn'); dialog.style.display='block'; gamestart(); } function gamestart(){ var btn =document.querySelector('#btn_hitori'); btn.addEventListener('click',hitori,false); } function hitori(){ var dialog =document.querySelector('#gamegamenn'); dialog.style.display='none'; var dialog =document.querySelector('#map'); dialog.style.display='block'; chg(); } function chg(){ sai=new Array("sai0.png","sai1.png","sai2.png","sai3.png","sai4.png","sai5.png","sai6.png"); r=Math.random()*6; //乱数表 rr=Math.floor(r)+1;   //切り捨てて+1する document.saikoro.src=sai[rr]; //サイコロを入れ替える }