[問題] JS全域變數如何透過網頁控制項動態賦值?

看板Ajax作者 (王建民)時間12年前 (2012/03/09 15:35), 編輯推噓5(5021)
留言26則, 3人參與, 最新討論串1/2 (看更多)
基於某些理由以及描述方便,我寫了以下一段的JS碼。 <head><title> 未命名頁面 </title> <script type="text/javascript"> var Point_1; var Point_2; var Point_3; var Point_4; var Point_5; function cbChange(PointName,ControlName,Value) { if (document.getElementById(ControlName).checked == true) { PointName = Value; alert(PointName); //alert(Point_1);//註記 } if (document.getElementById(ControlName).checked == false) { alert(PointName); } } </script> </head> <body> <form name="form1" method="post" action="default.aspx" id="form1"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGRZmWsrNGbPJujnk93ixuFe+HAvUQ==" /> </div> <div> <input id="cb_1" type="checkbox" name="cb_1" onclick="cbChange(Point_1,'cb_1',1);" /> <input id="cb_2" type="checkbox" name="cb_2" onclick="cbChange(Point_2,'cb_2',2);" /> <input id="cb_3" type="checkbox" name="cb_3" onclick="cbChange(Point_3,'cb_3',3);" /> <input id="cb_4" type="checkbox" name="cb_4" onclick="cbChange(Point_4,'cb_4',4);" /> <input id="cb_5" type="checkbox" name="cb_5" onclick="cbChange(Point_5,'cb_5',5);" /> </div> </form> </body> </html> 網頁佈署後,點按checkbox,勾選(checked=true)時顯示正常。 但反勾選(checked=false)時,其值顯示undifined. 註記:實際上我通過檢查,其實在第一階段就沒有賦值到全域變數上了。 我的疑問與需求是,如何透過網頁控制項,動態賦值JS全域變數? 備註:我基於以下理由,衍生了上述特殊要求 (1)checkbox控制項,乃成千上萬,其賦值(Value),為經由資料庫讀取而出的資料, 透過控制項動態佈署完成。 (2)關於JS函數--cbChange。 原先的做法是新增一組checkbox,就新增一組函數來服務之,運作上沒有問題, 但當checkbox數量越來越多時,函數也必須等量增加,網頁大小因此暴漲, 因此衍生撰寫一通用JS函數,來服務控制項賦值的想法。 不知版上有無先進撰寫過類似的語法,望不吝提示。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.61.67

03/09 15:46, , 1F
你的中文好奇怪.... 討論問題時可以用白話文
03/09 15:46, 1F

03/09 15:48, , 2F
以及你function內是把「PointName」指定為Value,不是把
03/09 15:48, 2F

03/09 15:49, , 3F
「Point_1」之類的指定為Value
03/09 15:49, 3F

03/09 15:49, , 4F
不好意思 等下改 寫程式寫到腦袋透逗了 連中文也退化...
03/09 15:49, 4F

03/09 15:50, , 5F
如果要那樣指定,要用eval還是evel(忘記怎麼拼),詳細的用
03/09 15:50, 5F

03/09 15:50, , 6F
對 我的疑問就是 如何把Point_1動態賦值
03/09 15:50, 6F

03/09 15:51, , 7F
法去GOOGLE會比較清楚。
03/09 15:51, 7F

03/09 15:52, , 8F

03/09 15:54, , 9F
不過,如果只是為了判斷有沒有被點選的話,直接用
03/09 15:54, 9F

03/09 15:54, , 10F
document.getElementById(ControlName).checked去判斷,不
03/09 15:54, 10F

03/09 15:55, , 11F
是比較方便嗎? 要不然變數會很多。如果覺得寫起來麻煩,那
03/09 15:55, 11F

03/09 15:55, , 12F
就用jQuary吧
03/09 15:55, 12F

03/09 16:01, , 13F
感謝 等下來研究
03/09 16:01, 13F

03/09 19:17, , 14F
eval / jQuery...
03/09 19:17, 14F

03/09 19:20, , 15F
有什麼困難而不用伺服器端程式直接產生HTML嗎?
03/09 19:20, 15F

03/12 11:39, , 16F
我的確是用伺服器端程式產生控制項群以及函數
03/12 11:39, 16F

03/12 11:40, , 17F
為了在版上描述方便 而僅改寫貼上部份JS程式碼
03/12 11:40, 17F

03/12 11:41, , 18F
剛才研究了eval的用法 的確符合我的需求
03/12 11:41, 18F

03/12 11:42, , 19F
實際達成了動態網頁控制項透過通用JS函式賦值動態全域變
03/12 11:42, 19F

03/12 11:42, , 20F
數的效果
03/12 11:42, 20F

03/12 11:44, , 21F
因為以前小弟的寫法 除了網頁控制項、全域變數是動態外
03/12 11:44, 21F

03/12 11:45, , 22F
繫接用於參數傳遞的JS函式也需動態 也就是1對1對1的服務
03/12 11:45, 22F

03/12 11:46, , 23F
當網頁控制項數量大幅增長時 亦衍生了數十萬行的JS函式碼
03/12 11:46, 23F

03/12 11:48, , 24F
在網頁LOAD時,對讀取效率與使用者經驗造成損害
03/12 11:48, 24F

03/12 11:49, , 25F
才會衍生能否用一組"通用JS函式"來服務眾多控制項與全域
03/12 11:49, 25F

03/12 11:49, , 26F
變數的疑問與需求
03/12 11:49, 26F
文章代碼(AID): #1FMRAp1_ (Ajax)
文章代碼(AID): #1FMRAp1_ (Ajax)