今天做了一个项目,其中涉及到多选和单选,一般我们用HTML控件中的CheckBox和RadioBox,但竟然是用微软的Asp.net,那为了方便,自然用其自带的控件CheckBoxlist 和 Radiobuttonlist。而这两个控件有个弊端,就是Js的获取不如Html中的CheckBox和RadioBox来得方便,在网上找了一些方法,解决了一些问题,但网上的方法通常只使用与普通网页,而我所做的是继承母板页下的页面,所以解决方法有些出入。
这里顺便说一下,在普通页面里面我们采用document.getElementById(ID)来获取到控件ID,这是可行的,但在继承母板页的页面中这种方法获取不到,需用document.getElementById("<%=id.ClientID%>")来获取。当解决这个问题之后剩下的问题就跟普通页面差不多了。
言归正传,
一、Radiobuttonlist的获取方法
普通网页中document.all(RadiobuttonlistID)和document.getElementById(RadiobuttonlistID)都能获取,母板页中仅document.getElementById("<%=RadiobuttonlistID.ClientID%>")可以获取。
普通页面中下面的方法可以做到取子项值:
var opts=document.all("RadiobuttonlistID");
alert(opts.length);
for (var i = 0; i < opts.length; i++)
{
if (opts[i].checked)
{
alert(opts[i].value);
break;
}
}
而母板页中这个方法不可行,opts.length为没有定义,即取不到子项的值。采用下面办法可以:
var inputs = document.getElementById("<%=RadiobuttonlistID.ClientID %>").getElementsByTagName("INPUT");
for(i = 0;i<inputs.length;i++)
{
if(inputs[i].checked)
{
alert(inputs[i].value);
}
}
二、CheckBoxlist 的获取方法
原本以为CheckBoxlist 得获取方法跟Radiobuttonlist一样,等真正操作之后,发现有点区别,在于值的获取上有些差别。
var inputs = document.getElementById("<%=mSelect.ClientID %>").getElementsByTagName("INPUT");
for(i = 0;i<inputs.length;i++)
{
if(inputs[i].checked)
{
alert(inputs[i].parentElement.innerText); //值的获取必须采用这种方法,inputs[i].value取不到值。
}
}
三、其他小的细节
1、不知道大家有没有注意<asp:Label />的值通过document.getElementById(ID).value是获取不到的,必须通过document.getElementById(ID).innerText才能获取到。
2、js中声明一个变量必须赋值,否则默认为未定义。比如:
var res;
res+='hello';
这句话的结果是多少呢?hello?错了,是undefinedhello。必须在定义的时候赋值,var res='';这样就对了。
一点小结,希望对其他人有帮助。