.Net的MasterPage中的radiobuttonlist控件的javascript客户端取值
2008-06-24 23:33
281 查看
如何在客户端取到服务器控件的ID呢,这个问题很久很久以前的古老程序要就说明了这个问题了,在如今的AJAX应用中我们也通过之前的这种解决办法解决了需要的问题,一个小小的ClientID搞定所有(我的第一篇Blog文件中有说明),无论控件是在自定义控件中还是在MasterPage中都可以通过ClientID轻松的获取到控件的ID。但是今天我却遇到了另外一个问题,上面的方法突然在radiobuttonlist这个控件中不能应用了。
下面就说说我遇到的情况
1
Q:问题出在哪里,为什么会这样
A:以前获取控件的值都是通过documeng.getElementById+ID来得到的,但是radiobuttonlist控件比较特殊,他的每一个项目都会存在不同的ID,而每个项目之间的关系是通过groupname来决定的,也就是说同一个groupname下的radio可以进行相互的互斥选择。问题出要出现在互斥上面。
2
Q:通常情况怎么解决
A:通常的情况我们是通过documeng.getElementByName来获取的radiobuttonlist的groupname然后再用循环判断哪一个项目被checked,最后判断出用户选择的是哪个项目。具体的代码如下(借用一下别人的代码)
1<script language="javascript">
2function getRadio()
3</script>
3
Q:为什么通常的办法不行了呢?
A:为什么通常的方法不行了呢?原因就出在嵌套上面,尤其是在用到masterpage的页面中,获取radiobuttonlist在客户端的name值就变得非常的不容易了
4
Q:如何来解决
A:上面说明了问题,最后说说怎么来解决吧,解决的方法一共有三种(我找到的,可能还有我没有找到的更好的方法)
a)通过手动替换ID值来获得Name值
这个方法的意思就是还是和以前一样通过ClientID来获取控件的ID,然后对ID值进行一下加工处理就可以得到Name值了,具体的方法如下
<span id="ctl00_ContentPlaceHolder1_RadioButtonList1"><input id="ctl00_ContentPlaceHolder1_RadioButtonList1_0" type="radio" name="ctl00$ContentPlaceHolder1$RadioButtonList1" value="1" /><label for="ctl00_ContentPlaceHolder1_RadioButtonList1_0">1</label><input id="ctl00_ContentPlaceHolder1_RadioButtonList1_1" type="radio" name="ctl00$ContentPlaceHolder1$RadioButtonList1" value="2" /><label for="ctl00_ContentPlaceHolder1_RadioButtonList1_1">2</label></span>
上面的代码显示的是一个radiobuttonlist生成HTML的源文件,可以看出来id和name是那么的相似,一个是ctl00_ContentPlaceHolder1_RadioButtonList1一个是ctl00$ContentPlaceHolder1$RadioButtonList1,区别就在于一个是用_来组合一个使用$来组合,所以我们获得ID以后用一下replace就可以轻松的获取到相应的Name值。得到了Name值就可以通过上面的传统方法来获取你想知道的内容了,嘿嘿
但是这个方法也存在一个问题,就是你的控件名称不能包含有_符号,如果存在的话这个方法反而会带来麻烦
b)通过radiobuttonlist中的项目ID来获取相应的值
这个方法比较简单了,继续观察上面的HTML源文件,可以看出来radiobuttonlist的每个项目的命名都是有规律的,第一项的ID结尾时0,第二项的ID结尾时1,以此类推,至于之前的名字就是控件的ClientID,这样你也可以通过循环来得到哪个项目被选中了
C)最后一个方法在我来看是一种比较好玩的办法,不过可能一般人还是不太容易接受的,因为这个方法会产生HTML的编译错误(不是后台的编译错误,不影响运行),不过这个方法确实是一个聪明的方法。下面就贴出来具体的代码
1<asp:radiobuttonlist id="RadioButtonList1" runat="server" repeatdirection="Horizontal" repeatlayout="Flow">
2 <asp:listitem value="1" onclick="setvalue('1')">1</asp:listitem>
3 <asp:listitem value="2" onclick="setvalue('1')">2</asp:listitem>
4 </asp:radiobuttonlist>
嘿嘿,看到上面代码的不同了吗?对,就是在listitem中添加onclick客户端事件,这样每次onclick都可以确定哪个项目被选了,嘿嘿,我真的觉得这个方法很好玩。
不过这个方法也存在问题,问题就在于当你用数据绑定项目的时候会出现问题,主要不好控制onclick的内容。
上面3个方法是我今天找到的,写到这里的时候我又搜索到了一种方法,感觉也很好,贴出来大家看看
1 function togglePannelStatus(content)
2
总之这个问题还是不难的,不过自己想想一个取值就这么多种方法,还真的挺好玩的,嘿嘿。
好了,今天到这里了,这两天遇到的问题也都差不多说出来了,希望可以帮助到以后遇到这些问题的人,嘿嘿
下面就说说我遇到的情况
1
Q:问题出在哪里,为什么会这样
A:以前获取控件的值都是通过documeng.getElementById+ID来得到的,但是radiobuttonlist控件比较特殊,他的每一个项目都会存在不同的ID,而每个项目之间的关系是通过groupname来决定的,也就是说同一个groupname下的radio可以进行相互的互斥选择。问题出要出现在互斥上面。
2
Q:通常情况怎么解决
A:通常的情况我们是通过documeng.getElementByName来获取的radiobuttonlist的groupname然后再用循环判断哪一个项目被checked,最后判断出用户选择的是哪个项目。具体的代码如下(借用一下别人的代码)
1<script language="javascript">
2function getRadio()
3</script>
3
Q:为什么通常的办法不行了呢?
A:为什么通常的方法不行了呢?原因就出在嵌套上面,尤其是在用到masterpage的页面中,获取radiobuttonlist在客户端的name值就变得非常的不容易了
4
Q:如何来解决
A:上面说明了问题,最后说说怎么来解决吧,解决的方法一共有三种(我找到的,可能还有我没有找到的更好的方法)
a)通过手动替换ID值来获得Name值
这个方法的意思就是还是和以前一样通过ClientID来获取控件的ID,然后对ID值进行一下加工处理就可以得到Name值了,具体的方法如下
<span id="ctl00_ContentPlaceHolder1_RadioButtonList1"><input id="ctl00_ContentPlaceHolder1_RadioButtonList1_0" type="radio" name="ctl00$ContentPlaceHolder1$RadioButtonList1" value="1" /><label for="ctl00_ContentPlaceHolder1_RadioButtonList1_0">1</label><input id="ctl00_ContentPlaceHolder1_RadioButtonList1_1" type="radio" name="ctl00$ContentPlaceHolder1$RadioButtonList1" value="2" /><label for="ctl00_ContentPlaceHolder1_RadioButtonList1_1">2</label></span>
上面的代码显示的是一个radiobuttonlist生成HTML的源文件,可以看出来id和name是那么的相似,一个是ctl00_ContentPlaceHolder1_RadioButtonList1一个是ctl00$ContentPlaceHolder1$RadioButtonList1,区别就在于一个是用_来组合一个使用$来组合,所以我们获得ID以后用一下replace就可以轻松的获取到相应的Name值。得到了Name值就可以通过上面的传统方法来获取你想知道的内容了,嘿嘿
但是这个方法也存在一个问题,就是你的控件名称不能包含有_符号,如果存在的话这个方法反而会带来麻烦
b)通过radiobuttonlist中的项目ID来获取相应的值
这个方法比较简单了,继续观察上面的HTML源文件,可以看出来radiobuttonlist的每个项目的命名都是有规律的,第一项的ID结尾时0,第二项的ID结尾时1,以此类推,至于之前的名字就是控件的ClientID,这样你也可以通过循环来得到哪个项目被选中了
C)最后一个方法在我来看是一种比较好玩的办法,不过可能一般人还是不太容易接受的,因为这个方法会产生HTML的编译错误(不是后台的编译错误,不影响运行),不过这个方法确实是一个聪明的方法。下面就贴出来具体的代码
1<asp:radiobuttonlist id="RadioButtonList1" runat="server" repeatdirection="Horizontal" repeatlayout="Flow">
2 <asp:listitem value="1" onclick="setvalue('1')">1</asp:listitem>
3 <asp:listitem value="2" onclick="setvalue('1')">2</asp:listitem>
4 </asp:radiobuttonlist>
嘿嘿,看到上面代码的不同了吗?对,就是在listitem中添加onclick客户端事件,这样每次onclick都可以确定哪个项目被选了,嘿嘿,我真的觉得这个方法很好玩。
不过这个方法也存在问题,问题就在于当你用数据绑定项目的时候会出现问题,主要不好控制onclick的内容。
上面3个方法是我今天找到的,写到这里的时候我又搜索到了一种方法,感觉也很好,贴出来大家看看
1 function togglePannelStatus(content)
2
总之这个问题还是不难的,不过自己想想一个取值就这么多种方法,还真的挺好玩的,嘿嘿。
好了,今天到这里了,这两天遇到的问题也都差不多说出来了,希望可以帮助到以后遇到这些问题的人,嘿嘿
相关文章推荐
- 使用Masterpage跟用户控件时,在指定页面的Head加载Javascript
- asp.net从masterPage继承的页面,如何在客户端用javascript取control(比如textbox)的值
- Jquery 对.net服务器控件RadioButtonList进行赋值和取值的操作
- Jquery 对.net服务器控件RadioButtonList进行赋值和取值的操作
- ASP.NET里masterpage的javascript问题
- MasterPage嵌套及MasterPage中的控件和变量的访问
- Asp.net中的JavaScript使用之二服务器控件的客户端事件
- 步步为营VS 2008 + .NET 3.5(1) - VS 2008新特性之Multi Targeting(多定向)、Web Designer and CSS(集成了CSS的web设计器)和Nested Master Page(嵌套母版页)
- 【转】当PreviousPage.FindControl遇到MasterPage,如何查找控件
- SharePoint 2010 master page 控件介绍(5):其他
- 为服务器控件添加javascript客户端事件
- 使用 ASP.NET Atlas PageNavigator控件实现客户端分页导航
- 客户端的JavaScript脚本中获取服务器端控件的值 及ID
- PreviousPage.FindControl遇到MasterPage查找控件的方法
- masterpage中FORM和控件ID
- .net中正则表达式的客户端验证--javascript
- ASP.Net访问母版页(MasterPage)控件、属性、方法及母版
- javascript客户端遍历控件与获取父容器对象示例代码
- 如何绕过.net中客户端验证控件的验证
- 客户端用JavaScript填充DropDownList控件,服务器端读不到值