googleで
カスタム検索
プロフィール

けろ&ひな

Author:けろ&ひな
大阪在住。
親ばか。
最近、転職したよ。でも、やってることは一緒なんだけどね。;-P

最近の記事
カテゴリー
月別アーカイブ
最近のコメント
最近のトラックバック
スポンサード リンク

スポンサーサイト--------(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JS]2重送信チェックを。。。2012-10-05(Fri)

業務の仕様上、どうしても必要になった。
サーバーサイドでやりたかったけど、なぜか嫌って言われた。。。
仕方ないからクライアント側(JS)でやることにした。。。

jquery使ってる関係で、$().click()とか使ってるんで、できるだけ影響が少ないように$().xclick()としてラップして使うことにした。

;(function($) {
/*
* 2重送信防止.
* ・チェック対象外にする場合は、対象タグのクラスに"ignoreDblSubmitCheck"を設定。
* ・$().click -> $().xclick, confirm() -> $.xconfirm() で対応
*
* @author kero_y2
*/
$.extend({
dblSubmitCheckTarget : null
});
var methods = {
check: function(target) {
if ($.dblSubmitCheckTarget) {
return false;
}
$.dblSubmitCheckTarget = target;
return true;
}
};
$.fn.dblSubmitCheck = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
return false;
}
};
$.extend(methods, {
init : function(target, applyMethod) {
if ($(target).is(".ignoreDblSubmitCheck")) {
return this;
} else if (target[applyMethod]) {
var orgMethod = target[applyMethod];
target[applyMethod] = function() {
if ($(this).dblSubmitCheck("check", this)) {
return orgMethod.apply(this, arguments);
}
return false;
};
}
}
});

$.fn.xclick = function(callback) {
var orgCallback = callback;
return $(this).click(function() {
if ($(this).dblSubmitCheck("check", this)) {
return orgCallback.apply(this, Array.prototype.slice.call(arguments, 1));
} else {
return false;
}
});
};

$.extend({
xconfirm:function(msg) {
var result = confirm(msg);
if (!result) {
$.dblSubmitCheckTarget = null;
}
return result;
}
});

})(jQuery);


使用方法は以下の通り。
$(document).ready(function() {
// 子画面起動で親画面がいるときは、親画面のチェックオブジェクトをクリアする。
if (window.opener && window.opener.$ && window.opener.$.dblSubmitCheckTarget ) {
window.opener.$.dblSubmitCheckTarget = null;
}
// inputタグの onclick の場合
$('input').each(function(index) {
return $(this).dblSubmitCheck (this, "onclick");
});
// submit の場合
$(':submit').xclick(function(){
return true;
});
});


$().click() 使ってる時は以下の通り変更する。
$("input").xclick(function(){
:
}


kumu.jsとか使えればよかったんだけど、なんか色々理由があって使えなかったらしい。。。
即席で作ったようなものだけど、今のところ問題なく動いてるようだ。
関連記事
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

工事中
RSSフィード
リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。