1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jQuery UIのDialogを使い、確認ダイアログをいい感じに実装する

Posted at

課題

フォームを登録する前など、何らかの処理を行う前に確認ダイアログを出したいケースはよくあります。
その際、jQuery UIのDialogを使い実装すると大体以下のような感じになると思います。

register.js

	//登録ボタン押下時
	$("#register").click(function () {
            //確認ダイアログを表示
            $('#confirm').dialog('open');
	});

	//確認ダイアログ
	$("#confirm").dialog({
		buttons : {
			"OK" : function() {
    				//バリデーションなどの登録前処理
                     
    				//フォームを送信
    				$('form').submit();
			},
			"キャンセル" : function() {
				//キャンセル時処理
			}
		}
	});

しかしこのような実装方法だと、登録前処理や登録後処理を登録ボタン押下時のイベント下に記述できず、確認ダイアログのイベント下に登録処理を記述しなくてはならないため見通しが悪くなってしまいます。
また引数なども素直に渡すことができないため工夫する必要がありました。

対応策

jQuery.Deferredを使い以下のような拡張プラグインを作成しました。

jquery-ui-dialog-extend.js
(function($) {
	$.confirm_jquery_ui_dialog = function(options) {
		var setting = $.extend({
			msg: '',
			dialog_id: '',
			ok_word: 'OK',
			cancel_word: 'キャンセル',
		}, options||{});

		if(setting.dialog_id == ''){
			throw "do not set dialog_id";
		}

		var d = new $.Deferred;
		var buttons = [
			{
				text: setting.ok_word,//OKボタン押下時
				click: function() {
					$(this).dialog('close');
					d.resolve();
				}
			},
			{
				text: setting.cancel_word,//キャンセルボタン押下時
				click: function() {
					$(this).dialog('close');
					d.reject();
				}
			},

		];

		$(setting.dialog_id).dialog({
			buttons : buttons,
		});

		$(setting.dialog_id).text(setting.msg);
		$(setting.dialog_id).dialog('open');
		return d.promise();
	};
})(jQuery);

register.js
        //登録ボタン押下時
	$("#register").click(function () {
		$.confirm_jquery_ui_dialog({
			msg: "登録しますか?",
			dialog_id: "#confirm",
		}).done(function(){
				//バリデーションなどの登録前処理
                     
				//フォームを送信
				$('form').submit();
		}).fail(function(e){
			//キャンセル時処理
		}).always(function(){
			//OKボタン押下時とキャンセルボタン押下時の共通処理
		});
	});

こうすることで登録ボタン押下時のイベント下に素直に登録処理を記述できるので、見通しがよくスッキリとした形になりました。
以上参考までに。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?