作者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