作者Qiqi (潑潑)
看板Ajax
標題[問題] 如何防止使用者亂點?
時間Sun Mar 25 10:24:54 2012
我做了一個選單
點了之後會有背景淡入淡出
同時也淡入一個視窗框,內容用load來的
load後再用if else來判斷是否此頁需要用after加入其他tag
但若使用者亂點,動畫就會亂跑
目前解法是在動畫前先加個stop。 #obj.stop().fadeIn();
不知這種方法是否正確。
但load+after我就解不開了
譬如 load(123.html) --> <div>123</div>
after('<img />') --> <div>123</div><img />
但若亂點,就會有重複after的問題 --> <div>123</div><img /><img />
這該怎麼避免?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.252.123.131
1F:推 mrbigmouth:在click function最前方加判斷式 只要還有動畫進行中 03/25 10:57
2F:→ mrbigmouth:就return 03/25 10:57
不好意思,我能力不太夠,看不懂。 可以寫個範例嗎?
我目前大概是這樣:
$("#menu").click({
var idx = $(this).index();
$("#info").load("view/"+idx+".html,function({
if( idx == 6 ){
$("#info").after("<img />");
}
}));
})
亂點的話會變得像這樣:
<section id="info">
<div>This is load html</div>
<img />
<img /> <--亂點多出來的tag
</sectino>
※ 編輯: Qiqi 來自: 114.41.106.23 (03/26 19:40)
3F:推 kerash:加個 flag, 例如 click 前判斷flag==false執行 true就跳過 03/26 20:07
4F:→ kerash:然後在 click 事件結束後把 flag reset 03/26 20:08
var clicked = false;
$("#menu").click({
clicked = true;
var idx = $(this).index();
$("#info").load("view/"+idx+".html,function({
if( idx == 6 && clicked == true ){
$("#info").after("<img />");
clicked = false;
}
}));
})
類似這樣嗎?
※ 編輯: Qiqi 來自: 114.41.106.23 (03/26 20:17)
5F:推 kerash:大致上是如此,不過 load 中的 if 不用特地加 click==true 03/26 20:33
6F:→ kerash:把 reset 放在 if 外面就可以了 03/26 20:34
7F:→ kerash:否則當你 idx 不等於 6 時就會因為 flag = false 而無反應 03/26 20:34
8F:→ kerash:另外在 click 後的第一步先判斷 if(click==true) 再執行 03/26 20:35
再修一次,把clicked改flag好了,不然會把click跟clicked搞混
var flag = true;
$("#menu").click({
if(flag){
flag = false;
var idx = $(this).index();
$("#info").load("view/"+idx+".html,function({
if( idx == 6){
$("#info").after("<img />");
}
}));
flag = true;
}
})
第一步先if(flag) 是因為if以外就算只有 a=1 ,被亂點還是會去跑
雖然不影響程式的結果,但會吃資源,是嗎?
※ 編輯: Qiqi 來自: 114.41.105.162 (03/26 21:50)
9F:推 kerash:如果不先if的話,就一樣會執行load功能,怕會有錯 03/26 21:58
10F:→ kerash:因為我不知道你的 load 會是甚麼東西,但這樣會正確點 03/26 21:58
11F:→ Qiqi:謝謝 03/27 19:32