最速方式でダブルサブミットを解決する
意外に使えるこの方式。
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を押せなくしちゃう方向に。
まあ、ダブルサブミットじゃないか。この問題は。
要は
リンク連打をどう防ぐか?
ってことなんだよね。
追記:
あ、コレはサンプルなんで問題あります。
中止ボタン押されたら戻せないのでタイマーで一定時間で戻せるようにしておくのがベストかな。
うくく。