jQuery UI (http://ui.jquery.com/) には便利なコンポーネントがある。このダイアログを使ってユーザーへの確認に使うモーダルダイアログを作りたい。
設定仕様に幅がある分、わかりずらいところがある。ということで下記のように手軽に使える用に関数を作ってみた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
* 確認ダイアログ
*
* message : ダイアログのメッセージ本文
* title : ダイアログのタイトル
* buttonok : OKボタンのテキスト
* buttoncancel : キャンセルボタンのテキスト
* response : コールバック関数を指定する。引数 cancel にボタン選択の結果が入る。
* OK ならば false キャンセルならば true となる。
*/
function confirmDialog(message, title, buttonok, buttoncancel, response){
var _dlg = $('<div>'+message+'</div>');
var _buttons = {};
_buttons[buttonok] = function(){$(this).dialog('close');response(false)};
_buttons[buttoncancel] = function(){$(this).dialog('close');response(true)};
_dlg.dialog({
modal:true,
draggable:false,
title:title,
height:130,
width:320,
buttons:_buttons,
overlay:{ opacity:0.3, background:'#225B7F' }
});
}
/* Sample */
confirmDialog('この処理を続行しますか?', '確認', 'OK', 'キャンセル',
function(cancel){
if (cancel) return;
/*------------
処理を書く
------------*/
});

ダイアログのベースとなる div は Document DOM ツリーに存在していなくてもいいので生成して、dialog() を呼び出すだけで動く。これは便利だ。dialog の引数で様々な設定が可能である。上記の例では見た目を一つのアプリで統一するので幅、高さなど固定で定義している。あとは modal 化と背景がクリックできないことを明示するために overlay を設定している。
ちょっとわかりづらいのは、buttons で表示ボタンがという設定できるのだが、ボタンのラベル値がキーであり、対となる値が選択時に走る関数の定義となるところだ。定義の例では、ボタン名としてキーを変数値にしたいために map[key] = func としてセットしている。