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实现iframe动态调整高度的代码
Jan 06 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
Jul 04 Javascript
图片延迟加载的实现代码(模仿懒惰)
Mar 29 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
Nov 20 Javascript
jQuery入门介绍之基础知识
Jan 13 Javascript
jQuery实现可展开合拢的手风琴面板菜单
Sep 15 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
Oct 12 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
Jan 20 Javascript
解决iview打包时UglifyJs报错的问题
Mar 07 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
优雅的使用javascript递归画一棵结构树示例代码
Sep 22 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
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空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
一些不错的js函数ajax
2008/08/20 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
Python实现统计文本文件字数的方法
2017/05/05 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
成人继续教育实施方案
2014/03/01 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
会议简讯范文
2015/07/20 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis