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 相关文章推荐
javascript一些不错的函数脚本代码
Sep 10 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 Javascript
基于jquery实现放大镜效果
Aug 17 Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
微信小程序入门教程
Nov 18 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 Javascript
微信小程序 简单教程实例详解
Jan 13 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
基于JavaScript实现全选、不选和反选效果
Feb 15 Javascript
vue脚手架vue-cli的学习使用教程
Jun 06 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 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
Terran兵种介绍
2020/03/14 星际争霸
PHP的中问验证码
2006/11/25 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
Python读写docx文件的方法
2018/05/08 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
Python pip 常用命令汇总
2020/10/19 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
个人职业及收入证明
2014/10/13 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
工程技术员岗位职责
2015/04/11 职场文书
python字符串常规操作大全
2021/05/02 Python