[問題] 如何用最少函式來處理ID相似性高的物件~~

看板Web_Design作者 (pl132)時間13年前 (2012/06/22 22:43), 編輯推噓7(7029)
留言36則, 6人參與, 最新討論串1/2 (看更多)
抱歉~我又來了╮(╯_╰)╭ 這次遇到的問題是如何做到函式的減量呢......... 以下是一個簡易的變換顏色函式2種失敗寫法~~ ================================== function test2(landID) { land1.innerText="land"+landID; s1="land"+landID; //旁邊是錯誤寫法...無效..... s1.bgcolor="white"; } ================================== function test2(landID) { (land+landID).bgcolor="white";//還是錯誤~因為land未定義........ } ================================== 遇到以下4個名子相似性高的ID~但要求不能一次改~要一個一個慢慢改.... 而且只能用一個函式去做~~請問各位會如何去更動上方函式呢? <td id="land1" onclick="test2(1)" bgcolor="red">請點我更換顏色</td> <td id="land2" onclick="test2(2)" bgcolor="red">請點我更換顏色</td> <td id="land3" onclick="test2(3)" bgcolor="red">請點我更換顏色</td> <td id="land4" onclick="test2(4)" bgcolor="red">請點我更換顏色</td> =================================== 再多問一個問題......... 算是雙重呼叫~~ 呼叫完第一個函式之後(成功~有改變字) 在第一個函式之內呼叫SetTimeout()函式卻失敗~~IE說需要有物件... function destiny()//命運 { var destiny1=0; destiny1=((Math.random()*100)%6)+1; //確認會玩家會有哪種命運 destiny1=parseInt(destiny1,10); switch(destiny1) { case 1: destiny0.innerText="闖紅燈付罰金5000元"; lose(5000); break; case 2: destiny0.innerText="意外獲得海外遺產20000元"; win(20000); break; case 3: destiny0.innerText="投資股票失利損失15000元"; lose(15000); break; case 4: destiny0.innerText="走路被狗咬~付出治療費20000元"; lose(20000); break; case 5: destiny0.innerText="刮刮樂刮中10000元"; win(10000); break; case 6: destiny0.innerText="拾金不昧獲的獎賞15000元"; win(15000); break; } SetTimeout("destiny3()",10000); } ========================= function destiny3() { destiny0.innerText="命運"; } ===================== <td colspan="9" rowspan="2" bgcolor="#FF0000" class="font1" id="destiny0" onclick="destiny()">命運</td> ============================ 非常感謝大家了............... 因為正在做專題~才會問那麼多問題..... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.47.84 ※ 編輯: pl132 來自: 114.45.47.84 (06/22 22:44)

06/22 22:46, , 1F
第一個問題問的我看不懂,第二個問題可能是大小寫問題
06/22 22:46, 1F

06/22 22:50, , 2F
其實就是大富翁遊戲裡面有很多格子~~但是我需要不同次去變
06/22 22:50, 2F

06/22 22:50, , 3F
顏色~
06/22 22:50, 3F

06/22 22:51, , 4F
不能一次變~~但是如果按照正常作法~每個格子都要設一個函數
06/22 22:51, 4F

06/22 22:52, , 5F
這樣我至少要設30幾個相似性高的函式但做的事卻幾乎都一樣~~
06/22 22:52, 5F

06/22 22:52, , 6F
所以才想說如何去減少函式數量~~
06/22 22:52, 6F

06/22 22:54, , 7F
利用相似性高的ID
06/22 22:54, 7F

06/22 22:54, , 8F
但是我卻無法設定成功...
06/22 22:54, 8F

06/22 23:04, , 9F

06/22 23:05, , 10F
其實你用手刻寫個遊戲還蠻強的QQ 都沒套用framework
06/22 23:05, 10F

06/22 23:06, , 11F
還有就是關於innerText 我會建議寫成innerHTML
06/22 23:06, 11F

06/22 23:07, , 12F
因為innerText是IE only的寫法 容易在IE外的瀏覽器失效
06/22 23:07, 12F

06/22 23:17, , 13F
可以問一下 你為什麼不用 jQuery 要用自己手刻嗎?
06/22 23:17, 13F

06/22 23:18, , 14F
我猜他不知道...XD
06/22 23:18, 14F

06/22 23:25, , 15F
第二個是 setTimeout(),開頭是小寫
06/22 23:25, 15F

06/22 23:30, , 16F
樓上突破盲點了...
06/22 23:30, 16F

06/22 23:37, , 17F
樓上我第一個回復有說大小寫喔XD,不過手刻也不是不好
06/22 23:37, 17F

06/22 23:37, , 18F
誰一開始學的時候不是手刻程式碼呢 ~
06/22 23:37, 18F

06/22 23:38, , 19F
我知道 jQuery啊= =但這個東西能用在第一題嗎QQ
06/22 23:38, 19F

06/22 23:39, , 20F
原來第2個開頭是小寫.....教學網站誤我...
06/22 23:39, 20F

06/22 23:41, , 21F
如果第一個解決不了的話~我看我真的要破1千行了....
06/22 23:41, 21F

06/22 23:46, , 22F
js內建function/property應該全都是小寫開頭的camel case
06/22 23:46, 22F

06/22 23:57, , 23F
樓上是指?
06/22 23:57, 23F

06/23 00:05, , 24F

06/23 00:06, , 25F
第一個問題我有貼範例了壓...
06/23 00:06, 25F

06/23 00:06, , 26F
看不懂嗎QQ?
06/23 00:06, 26F

06/23 00:35, , 27F
哈哈~~剛剛字太多沒看到XD~~明天早上來研究
06/23 00:35, 27F

06/23 00:42, , 28F
不過這也太猛了= =我根本沒學到這樣的概念....
06/23 00:42, 28F

06/23 00:43, , 29F
我還想說要是再不行就只好用Switch()了.....打到手軟ORZ
06/23 00:43, 29F

06/23 01:01, , 30F
s1=document.getElementById("land"+landID); // (?)
06/23 01:01, 30F

06/23 13:06, , 31F
if(element) {}這個有必要加嗎~剛試過沒有這個判斷式好像?
06/23 13:06, 31F

06/23 13:06, , 32F
也可以?
06/23 13:06, 32F

06/23 13:13, , 33F
不加能跑 這個算是避免抓不到元素的情況
06/23 13:13, 33F

06/23 13:14, , 34F
如果傳入一個錯誤的ID 造成他抓不到元素的話 會在if這個
06/23 13:14, 34F

06/23 13:14, , 35F
階段直接結束 不會噴錯誤
06/23 13:14, 35F

06/23 13:27, , 36F
OK~我把它也加上去好了~~正好拿來偵錯
06/23 13:27, 36F
文章代碼(AID): #1Fv8ISpL (Web_Design)
文章代碼(AID): #1Fv8ISpL (Web_Design)