作者Eleganse (王建民)
看板Ajax
標題[問題] JS全域變數如何透過網頁控制項動態賦值?
時間Fri Mar 9 15:35:12 2012
基於某些理由以及描述方便,我寫了以下一段的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
1F:推 LaPass:你的中文好奇怪.... 討論問題時可以用白話文 03/09 15:46
2F:推 LaPass:以及你function內是把「PointName」指定為Value,不是把 03/09 15:48
3F:→ LaPass:「Point_1」之類的指定為Value 03/09 15:49
4F:→ Eleganse:不好意思 等下改 寫程式寫到腦袋透逗了 連中文也退化... 03/09 15:49
5F:→ LaPass:如果要那樣指定,要用eval還是evel(忘記怎麼拼),詳細的用 03/09 15:50
6F:→ Eleganse:對 我的疑問就是 如何把Point_1動態賦值 03/09 15:50
7F:→ LaPass:法去GOOGLE會比較清楚。 03/09 15:51
9F:→ LaPass:不過,如果只是為了判斷有沒有被點選的話,直接用 03/09 15:54
10F:→ LaPass:document.getElementById(ControlName).checked去判斷,不 03/09 15:54
11F:→ LaPass:是比較方便嗎? 要不然變數會很多。如果覺得寫起來麻煩,那 03/09 15:55
12F:→ LaPass:就用jQuary吧 03/09 15:55
13F:→ Eleganse:感謝 等下來研究 03/09 16:01
14F:推 s25g5d4:eval / jQuery... 03/09 19:17
15F:推 s25g5d4:有什麼困難而不用伺服器端程式直接產生HTML嗎? 03/09 19:20
16F:→ Eleganse:我的確是用伺服器端程式產生控制項群以及函數 03/12 11:39
17F:→ Eleganse:為了在版上描述方便 而僅改寫貼上部份JS程式碼 03/12 11:40
18F:→ Eleganse:剛才研究了eval的用法 的確符合我的需求 03/12 11:41
19F:→ Eleganse:實際達成了動態網頁控制項透過通用JS函式賦值動態全域變 03/12 11:42
20F:→ Eleganse:數的效果 03/12 11:42
21F:→ Eleganse:因為以前小弟的寫法 除了網頁控制項、全域變數是動態外 03/12 11:44
22F:→ Eleganse:繫接用於參數傳遞的JS函式也需動態 也就是1對1對1的服務 03/12 11:45
23F:→ Eleganse:當網頁控制項數量大幅增長時 亦衍生了數十萬行的JS函式碼 03/12 11:46
24F:→ Eleganse:在網頁LOAD時,對讀取效率與使用者經驗造成損害 03/12 11:48
25F:→ Eleganse:才會衍生能否用一組"通用JS函式"來服務眾多控制項與全域 03/12 11:49
26F:→ Eleganse:變數的疑問與需求 03/12 11:49