在组织部项目中,有个动态表单的使用。根据不同的指标,显示不同的级别。如下图所示:
这里也是很容易实现,红色框内就是选择不同指标后显示的不同级别票数,通过条件让一般处理程序查询级别,然后后台拼接成html,前台在ajax回调函数中将html插入到相应的DIV即可实现。如何验证这些文本框必须为数字呢?
由于它的<input>的id值都是动态绑定数据库的id,前台根本不知道,我是name属性入手通过Jquery选择器实现。后台将文本框拼接的时候是这样的:
for (int i = 0; i < dt.Rows.Count; i++)
{
strData.Append("<div class='fitem'><label>" + dt.Rows[i]["LevelId"].ToString() + "票数:" + "</label><input id='" + dt.Rows[i]["LevelId"].ToString() + "' name='dd" + dt.Rows[i]["Id"].ToString() + "' type='text' class='easyui-datebox' style='margin-left:5px;width:125px;' maxlength='8'/> </div>");
}
这里每个<input>的name值都是以"dd+ID值"组成,验证也需要从dd开始,匹配以dd开头的文本框来验证。
JS代码为:
var object = $("input[name^='dd']") //匹配通配符,name为dd开头的
for (var i = 0; i < object.length; i++) {
var _input = object[i].value;
if (isNaN(_input)) {
alert('输入的票数必须为数字');
return;
}
}
$("input[name^='dd']"),它的意思就是匹配<input>元素中以dd开头的name属性值,^就是以什么开头的意思。
js中有个isNaN函数可以直接验证是否为数字,理解为:is not a number
将这些值传入到一般处理程序的时候是如何获取值呢?
一般处理程序中context.Request.Form[AllKeys]可以获取页面中有value属性的表单域,也就是控件值。
foreach (string key in context.Request.Form.AllKeys)
{
if (key.StartsWith("dd"))
{
enCityCharacter.other2 = key.Replace("dd", ""); //获取各个级别id
enCityCharacter.Votes = context.Request.Form[key]; //获取各个级别的票数
}
}
这里的key是控件的name值,key.StartsWith("dd")就是以dd开头的name值,正好取得上面拼接name的控件,而context.Request.Form[key]则是获取表单中该name的值。这样就得到了相对应的id与票数值。
功能很简单,学问倒是很大,谁用谁知道。