幸いStrutsの同期トークン処理を入れていたので、登録、更新処理は正常終了しているが、
Tomcatでずーと警告を吐くのは気に入らないので、対策を行うことにした。
ということで、JavaScriptで二度押しのチェックを入れることにした。
(Strutsのtiles機能を利用していたので、基となるJSPに細工をすればできそう。)
このようはチェックの方法は、昔からある話題なので、様々なところで紹介もされている。
さて、今回はjQueryを使っているので、jQueryでスマートにできる方法を探してみた。
良さそうな方法で以下のページを見つけたので早速取り入れてみた。
http://neta.ywcafe.net/001046.html
動作確認をしてみると、disabledは効いているが、submitされず。。。
他の方法も試してみたが、disabledを利用する方法は全てsubmitされなかった。
挙動的にsubmit時に、既にボタンがdisabledになっているため無効になっている感じだ。
前に同じような手法を使っていたのだけどな?jQueryの仕業?それともブラウザか何かの仕様が変わったのだろうか?
とりあえず、ダメなので別の方法を考える。要は二度押しを防止できればいいのだ。
ということで、上記のscriptを弄って、falseを返す仕組みに変えた。
ダウンロード処理とかで画面遷移がないことも考慮して、1秒後にはsubmitができるようにもしてみた。
$.fn.checkOnSubmit = function(){
var submitFlg = false;
$(this).submit(function(){
if(submitFlg == false){
submitFlg = true;
setTimeout(function(){submitFlg = false;},1000);
}else{
alert("二度押し判定");
return false;
}
});
return this;
};
呼び出し先。
$(function(){
$('form').checkOnSubmit(); // 全てのformに作用させる場合
//$('#hoge').checkOnSubmit(); // 特定のid属性をセットしたformタグに作用させる場合
//$('.hoge').checkOnSubmit(); // 特定のclass属性をセットしたformタグに作用させる場合
});
この手法を使うと、うまくsubmitされた。
二度押しチェックも働いて、processCallbacks status 2は出なくなった!
お〜。長らく解決できなかった問題だっただけに結構嬉しい。