javascript动态控制服务器控件实例


Posted in Javascript onSeptember 05, 2014

最近多个页面需要加载一些下拉列表框,供用户选择,原来都是在服务器端进行加载应运用。最后由于业务逻辑方面的考虑,需要将DropDownList的部分功能放到客户端实现。现在下拉列表的功能使用起来感觉比全部放到服务器端性能好多了。

具体方法:

在页面中放入一个DropDownList控件,并添加一项,用来分析其产生的HTML代码,这样在使用js进行动态控制时,将会非常清晰其测试代码如下所示:

<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>1</asp:ListItem>
</asp:DropDownList>

在浏览器中查看,并对Html进行分析:以下是DropDownList控件生成的HTML代码。和普通的select没

有区别。那么也就可以通过js来动态填充、删除、选择等控制。

<select name="DropDownList1" id="DropDownList1">
<option value="1">1</option>
</select>

可以将<asp:ListItem>1</asp:ListItem>删除,现在添加两个HTML button控件,分别用来实现添加选项,和删除所有选项。Button源码如下:

<input id="Button1" type="button" value="添加Option" onclick="addOption()" />

<input id="Button2" type="button" value="全部删除Option" onclick="delOption()" />

添加和删除函数如下所示:

function addOption(){

var ddlObj = document.getElementById("DropDownList1");//获取对象

if(ddlObj.length>0)

delOption();//先删除所有的,之后在添加 

var optText = new Array("founder","china","beijing");

var optValue = new Array("0","1","2");

var oOption = null;

for(var i=0;i<optText.length;i++){

oOption = new Option(optText[i],optValue[i]);

ddlObj.options.add(oOption);

}

}

function delOption(){

var ddlObj = document.getElementById("DropDownList1");//获取对象
for(var i=ddlObj.length-1;i>=0;i--){
ddlObj.remove(i);//firefox不支持ddlCurSelectKey.options.remove(),IE两种均支持
}
}

在浏览器中查看,可以轻松地创建选择下拉选项,由于这些是客户端生成,因此其效率上要高于服务器

端工作的代码。但是这个时候如果要使用DropDownList1.SelectedValue获取用户选择的选项,那么你会得

到一个错误。这是由于DropDownList是由JS动态添加的,因此,它的项不属于ViewState,并且不被维护,

也就是说我们无法在服务器端对其进行处理。为了解决这一问题,可以使用两种方式:1、Hidden控件保存

用户选项方式;2、Request.Form方式。(参见msdn品味Ajax)

1、我们在页面中添加一个Hidden控件,用它来保存DropDownList选项变化的信息,这样在用户选择感

兴趣的信息之后,我们就可以在服务器端获取信息,并进行处理,合理地实现客、服之间的分工。

对DropDownList控件添加一个onchange事件,此时它的html代码如下所示:

<asp:DropDownList ID="DropDownList1" runat="server" onchange="ResvItem()">
</asp:DropDownList>

Onchange事件如下所示,该事件主要保存用户选定的value:

function ResvItem(){
var objDdl = document.getElementById("DropDownList1");
document.getElementById("HiddenField1").value = objDdl.options[objDdl.selectedIndex].value;
}

在此之后,我们使用一个asp:button控件来测验结果:

protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(HiddenField1.Value);
}

到此,已经完成了所有的工作,但是还有一个问题,DropDownList的change事件只有在用户改变下拉选

项时才会触发。因此,用户使用默认选项进行提交时,则获取空值。因此我们可以在填充option时,即对

hidden初始化。对addOption事件添加一行代码如下:

function addOption(){

var ddlObj = document.getElementById("DropDownList1");//获取对象

if(ddlObj.length>0)

delOption();//先删除所有的,之后在添加 

var optText = new Array("founder","china","beijing");

var optValue = new Array("0","1","2");
var oOption = null;

for(var i=0;i<optText.length;i++){

oOption = new Option(optText[i],optValue[i]);

ddlObj.options.add(oOption);

}
document.getElementById("HiddenField1").value = optValue[0];
}

不过以上红色部分在TT浏览器下ADD不成功,其他浏览还没试过,以下是另一个种写法:

function GetDeptList()
{
var ddlCityType = document.getElementById("ddlCityType");
var ddlPosition = document.getElementById("ddlPosition");
var v = ddlCityType.options[ddlCityType.selectedIndex];
//alert(v.value);

var DeptList=Guest_UserRegister.GetDeptList(v.value).value;

var deptList=new Array();
deptList=DeptList.split(';');
for(var i=0;i<deptList.length;i++)
{
if(deptList[i]!="")
{
var dept=deptList[i].split(',');
var opt = document.createElement("option"); 
opt.innerHTML = dept[1];
opt.value = dept[0];
ddlPosition.insertBefore(opt, ddlPosition.firstChild);
}
}
}
function DelOption()
{
var ddluserSchool = document.getElementById("ddluserSchool");
var num=ddluserSchool.length;
while(num>0)
{
for(var j=0;j<num;j++)
{
ddluserSchool.remove(j);
}
num=ddluserSchool.length;
}

}
function GetSchoolList()
{
DelOption();
var ddlProvince = document.getElementById("ddlProvince");
var ddluserSchool = document.getElementById("ddluserSchool");
var v = ddlProvince.options[ddlProvince.selectedIndex];
var DeptList=Guest_UserRegister.GetSchoolList(v.value).value;
var deptList=new Array();
deptList=DeptList.split(';');
for(var i=0;i<deptList.length;i++)
{
if(deptList[i]!="")
{
var dept=deptList[i].split(',');
var opt = document.createElement("option"); 
opt.innerHTML = dept[1];
opt.value = dept[0];
ddluserSchool.insertBefore(opt, ddluserSchool.firstChild);
}
}
}
Javascript 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐share.js
Dec 23 Javascript
FLASH 广告之外的链接
Dec 16 Javascript
一个简单的jQuery插件制作 学习过程及实例
Apr 25 Javascript
js两行代码按指定格式输出日期时间
Oct 21 Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 Javascript
详解JavaScript中shift()方法的使用
Jun 09 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 Javascript
极易被忽视的javascript面试题七问七答
Feb 15 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
详解百度百科目录导航树小插件
Jan 08 Javascript
JS实现多张图片预览同步上传功能
Jun 23 Javascript
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
setTimeout()递归调用不加引号出错的解决方法
Sep 05 #Javascript
jQuery动态创建html元素的常用方法汇总
Sep 05 #Javascript
jquery单行文字向上滚动效果的实现代码
Sep 05 #Javascript
Javascript保存网页为图片借助于html2canvas库实现
Sep 05 #Javascript
JavaScript立即执行函数的三种不同写法
Sep 05 #Javascript
JavaScript实现生成GUID(全局统一标识符)
Sep 05 #Javascript
JavaScript判断textarea值是否为空并给出相应提示
Sep 04 #Javascript
You might like
PHP中is_file()函数使用指南
2015/05/08 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
PHP fclose函数用法总结
2019/02/15 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
jQuery表格插件datatables用法总结
2014/09/05 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
Python 26进制计算实现方法
2015/05/28 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python3.7中安装openCV库的方法
2018/07/11 Python
详解python之heapq模块及排序操作
2019/04/04 Python
kali中python版本的切换方法
2019/07/11 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
Python序列化pickle模块使用详解
2020/03/05 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
python中操作文件的模块的方法总结
2021/02/04 Python
恶意软件的定义
2014/11/12 面试题
高中考试作弊检讨书
2014/01/14 职场文书
授权委托书怎么写
2014/04/03 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript