Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

最速方式でダブルサブミットを解決する

意外に使えるこの方式。
formのサブミットはonsubmitでやればいいってのはなんとなくわかるけどリンクは・・・。
って人向け。
あとshibuya.jsいってない人向け。
昔、ma.laさんがblogに書いてて実際に使われてる手法なんだけど。

function addEvent(obj, evType, fn, useCapture){
	if(obj.addEventListener){
		obj.addEventListener(evType, fn, useCapture);
	}else if (obj.attachEvent){
		obj.attachEvent("on"+evType, fn);
	}
}
function hook(){
	addEvent(document.body,"click",function(e){
		e = e || window.event;
		var element = e.target || e.srcElement;
		if(element){
			var name = element.nodeName;
			if(name == 'A'){
				if(element.__hook){
					element.removeAttribute("href");
					//if (e.preventDefault) { 
					//	e.preventDefault(); 
					//	e.stopPropagation();
					//} else {
					//	e.returnValue = false;
					//	e.cancelBubble = true;
					//}
					return false;
				}else{
					element.__hook = true;
				}
			}
		}
	});
}

こいつをonloadとかに仕掛けておけばいい。
最初、イベントのキャンセルでやってたんだけどfirefoxだとうまくいかなかった。
なのでlinkを押せなくしちゃう方向に。
まあ、ダブルサブミットじゃないか。この問題は。
要は

リンク連打をどう防ぐか?

ってことなんだよね。
追記
あ、コレはサンプルなんで問題あります。
中止ボタン押されたら戻せないのでタイマーで一定時間で戻せるようにしておくのがベストかな。
うくく。