ダイアログとの連携
jQueryUI のダイアログユーティリティーとの連携サンプルです。
ボタンを押すとうにょ〜んとダイアログが出てきてグリッドが表示されます。
チェックボックスをチェックして「選択」ボタンを押すと、ダイアログが消えて、元の画面に選択された情報が表示されます。
注意点としては
- 表示はしないけど、データとして持っておきたいパラメータを hidden:true としてjqGridを構築する
- ダイアログのボタンを押した時に実行される関数内で、コールバック関数を呼ぶようにしています。グローバル変数を使いたくないので、ダイアログの option パラメータに「__on_close_callback」という元々はありもしないパラメータ名で使用してます。Javascriptのこういういい加減なところは、便利ですね。後で地獄を見ることになる可能性が高いのですが・・(^^;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ダイアログにグリッドを表示する</title> <link rel="stylesheet" type="text/css" media="screen" href="css/jquery-ui-1.7.2.custom.css" /> <link rel="stylesheet" type="text/css" media="screen" href="src/css/ui.jqgrid.css" /> <link rel="stylesheet" type="text/css" media="screen" href="src/css/jquery.searchFilter.css" /> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="js/jquery-ui-1.7.2.custom.js"></script> <script type="text/javascript" src="js/i18n/jquery-ui-i18n.js"></script> <script type="text/javascript" src="js/i18n/grid.locale-jp.js"></script> <script type="text/javascript" src="js/jquery.jqGrid.min.js"></script> <script type="text/javascript"> function on_close_callback(selected_rows) { if( !selected_rows ) return; if( selected_rows.length <= 0 ) { alert("選択してください"); return false; } else { var t = "選択された行は<br>"; for( var i=0; i<selected_rows.length; ++i ) { var r = $("#list").getRowData(selected_rows[i]); t += "<br>" + "番号、名前、隠しID:" + r.employee_no + ", " + r.name + ", " + r.hidden_id; } t += "<br><br>です"; $("#result").html(t); } } jQuery(document).ready(function() { $("#dialog").dialog({ bgiframe: true, autoOpen: false, show: "drop", hide: "drop", closeOnEscape: true, height: 500, width: 500, modal: true, buttons: { '選択': function() { var rows = $("#list").getGridParam("selarrrow"); var callback_func = $(this).dialog("option", "__on_close_callback"); if( callback_func ) { if( callback_func(rows)!==false ) $(this).dialog('close'); } else { $(this).dialog('close'); } }, 'キャンセル': function() { $(this).dialog('close'); } }, open: function() { jQuery("#list").jqGrid({ datatype: "local", colNames:['従業員番号', '名前', '隠しID'], colModel:[ {name:'employee_no', editable:true}, {name:'name' , editable:true}, {name:'hidden_id' , hidden:true}, ], multiselect: true, caption: 'ダイアログ' }); // クリアしておかないと以前の状態が残ってしまう jQuery("#list").clearGridData(); jQuery("#list").resetSelection(); var mydata = [ {employee_no:"1",name:"test1",hidden_id:"11"}, {employee_no:"2",name:"test2",hidden_id:"12"}, {employee_no:"3",name:"test3",hidden_id:"13"}, ]; for(var i=0;i<=mydata.length;i++) jQuery("#list").addRowData(undefined,mydata[i]); }, close: function() { } }); $('#show_dialog_button').click(function() { $('#dialog').dialog("option", "__on_close_callback", on_close_callback); $('#dialog').dialog('open'); }); }); </script> </head> <body> <div id="dialog" title="従業員選択"> <p>選択してください</p> <table id="list" class="scroll" cellpadding="0" cellspacing="0"></table> </div> <button id="show_dialog_button">ダイアログ表示</button> <div id="result"></div> </body> </html>