动态生成HTML元素-模拟在线考试功能
前言
我们在项目开发过程中,经常会遇到页面html元素无法提前预设,而是通过某一些条件动态生成的情况,这里我们需要考虑如下几个因素:
1.需要动态创建的元素类型,比如TextBox, Radio, CheckBox等
2.每一个元素动态命名,确保ID唯一
3.如何获取每一个元素的值
目的
1.预先设定题库
2.创建试卷,并针对该试卷选择题目,题目类型包含单选题与多选题
3.在线生成电子试卷,用户在线考试
4.考试完毕后在线给出得分
代码
通过一个ajax请求,根据考试试卷的名称加载该试卷下所有的试题:
public void GetItems()
{
var sqldb = SqlHelper.createdb("mts");
string strSql = "usp_get_items";
var dt = sqldb.GetDataTable(strSql);
var json = Library.JsonLib.DataTableToJson(dt);
Response.Write(json);
Response.End()
}
function gen_paper(paper_name) {
var strhtml_single = ""; //题目类型-单选题
var strhtml_double = ""; //题目类型-多选题
var sub_single = ""; //单选题下面的题目
var sub_double = ""; //多选题下面的题目
var main_title = ""; //试卷名称
var strhtml_operation = ""; //操作选项
$.ajax({
type: "post",
url: "exam.aspx?Oper=gen_paper&key=" + Math.random(),
data: { paper: encodeURIComponent(paper_name) },
dataType: "json",
success: function (data) {
if (data != null) {
strhtml_single = "<span id='span_single_01' ><div style='font-weight:bold'>一 单选题</div></span></br>";
strhtml_double = "<span id='span_double_01' ><div style='font-weight:bold'>二 多选题</div></span></br>";
main_title = "<div style='font-weight:bold;font-size:30px'align='center'>" + paper_name + "<div/>";
strhtml_operation = "<a id='btn_save' href='javascript:void(0);' class='easyui-linkbutton c6' style='padding:0 30px;text-align:center' onclick='save_result()'>提交</a>";
$(main_title).appendTo("#div_main");
$(strhtml_single).appendTo("#div_main");
$(strhtml_double).appendTo("#div_main");
$(strhtml_operation).appendTo("#div_main");
$.parser.parse("#div_main");
for (var i = 0; i < data.length; i++) {
if (data[i].TYPE_NAME == "单选题") {
single_title_id_arr.push(data[i].FID);
sub_single = "</br><span>" + (i + 1).toString() + "." + data[i].TITLE + "</span></br><span>" + seting_items(data[i].TYPE_NAME, data[i].ITEMS, "radio_" + i.toString()) + "</span></br>";
$(sub_single).appendTo("#span_single_01");
}
if (data[i].TYPE_NAME == "多选题") {
double_title_id_arr.push(data[i].FID);
sub_double = "</br><span>" + (i + 1).toString() + "." + data[i].TITLE + "</span></br><span>" + seting_items(data[i].TYPE_NAME, data[i].ITEMS, "ckb_" + i.toString()) + "</span></br>";
$(sub_double).appendTo("#span_double_01");
}
}
}
}
});
}


针对单选题与多选题分开处理,在动态创建元素的时候调用这个方法:
function seting_items(typeName, items, control_name) {
if (typeName == "单选题") {
var _single_str = "";
var _single_value_id = "";
var arr_single = items.split("@");
for (var i = 0; i < arr_single.length; i++) {
if (i == 0) {
_single_value_id = "A";
}
if (i == 1) {
_single_value_id = "B";
}
if (i == 2) {
_single_value_id = "C";
}
if (i == 3) {
_single_value_id = "D";
}
_single_str += "<input name='" + control_name + "' type='radio' value='" + _single_value_id + "' />" + arr_single[i] + " ";
}
return _single_str;
}
if (typeName == "多选题") {
var _double_str = "";
var _double_value_id = "";
var arr_double = items.split("@");
for (var i = 0; i < arr_double.length; i++) {
if (i == 0) {
_double_value_id = "A";
}
if (i == 1) {
_double_value_id = "B";
}
if (i == 2) {
_double_value_id = "C";
}
if (i == 3) {
_double_value_id = "D";
}
_double_str += "<input name='" + control_name + "' type='checkbox' value='" + _double_value_id + "' />" + arr_double[i] + " ";
}
return _double_str;
}
}
取值
元素动态创建完成之后,我们需要取值,方法如下:
function getRadioBoxValue(radioName) {
for (i = 0; i < obj.length; i++) {
if (obj[i].checked) {
return obj[i].value;
}
}
return "undefined";
}
function getCheckBoxValue(checkBoxName) {
var obj = document.getElementsByName(checkBoxName);
var _select_list = "";
for (k in obj) {
if (obj[k].checked) {
_select_list += obj[k].value + ",";
}
}
_select_list = _select_list.substring(0, _select_list.length - 1);
return _select_list;
}


取到用户选择的项目,我们就可以用来做进一步处理了,比如根据这个值判断用户是否考试合格等等!


动态生成HTML元素-模拟在线考试功能的更多相关文章
- 2)JS动态生成HTML元素的爬取
2)JS动态生成HTML元素的爬取 import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.W ...
- append动态生成的元素,无法触发事件的原因及解决方案
今天笔者在实现一个简单的动态生成元素功能的时候,发现了一个问题: 使用append动态生成的元素事件绑定失效了. 查阅资料后发现: click(fn)当选中的选择器被点击时触发回调函数fn.只针对与页 ...
- jquery动态生成的元素添加事件的方法
动态生成的元素如果要添加事件,要写成 $(document).on("click", "#txtName", function() { alert(this.v ...
- JS动态生成的元素,其对应的方法不响应(比如单击事件,鼠标移动事件等)
主要原因:在页面给元素注册点击事件的时候[ $(function () { XXX }); ],JS动态生成的元素还尚未生成,所以click事件就没有生效 解决方法: 方案一:js动态生成元素后再给 ...
- jquery无法为动态生成的元素添加点击事件的解决方法
遇到 jquery无法为动态生成的元素添加点击事件,谷歌一下,整理一下解决方法如下: (<li>中间的元素是动态生成的), 现在想为<i>添加点击事件, 例子如下: <d ...
- jQuery对于动态生成的元素绑定无效的问题~~
问题:很多时候发现,对动态生成的元素绑定click事件是无效的- 原因:直接绑定到动态生成的元素是无效的,是因为Jquery扫描文档找出所有的$(‘’)元素,并把函数绑定到每个元素的click事件上, ...
- Angularjs给动态生成的元素绑定事件
//获取动态生成的元素 getJqforAnguar:function(jqid){ angular.element(document).injector().invoke(function($com ...
- 动态生成html元素并为元素追加属性
动态生成HTML元素的方法有三种: 第一种:document.createElement()创建元素,再用appendChild( )方法将元素添加到指定节点 <!DOCTYPE html> ...
- Jquery中动态生成的元素没有点击事件或者只有一次点击事件
今天用jq做动态生成的元素的click事件时,click只执行了一次,当然有些朋友可能根本没执行, 执行了一次的原因是因为可能有函数加载了一遍,一次都没执行的可能是没绑定对象或者jq版本问题, 动态生 ...
随机推荐
- Scala 面向对象(五):面向对象的特征一:封装性
1 封装介绍 封装(encapsulation)就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作. 封装的理解和好处 隐 ...
- Scala 基础(五):Scala变量 (二) 数据类型
1 scala数据类型介绍 Scala 与 Java有着相同的数据类型,在Scala中数据类型都是对象,也就是说scala没有java中的原生类型 Scala数据类型分为两大类 AnyVal(值类型) ...
- CSS3 文字边框 -webkit-text-stroke 镂空的字体
CSS边框的一个不足就是只有矩形的元素才能使用. -webkit-text-stroke可以为文字添加边框.它不但可以设置文字边框的宽度,也能设置其颜色. 而且,配合使用color: transpar ...
- Go的100天之旅-03变量
变量 变量介绍 变量这个词来源于数学,类似方程中的x.y,代表的是存储在计算机中的值.这里主要介绍Go和其它编程语言不一样的地方,在前面我们提到过,Go是一门静态语言.静态语言区别动态语言一个重要的特 ...
- CentOS7 源码编译安装Nginx
源码编译安装nginx 1.下载nginx源码包(这里以nginx-1.18.0为例) wget http://nginx.org/download/nginx-1.18.0.tar.gz 2 ...
- Python Ethical Hacking - VULNERABILITY SCANNER(9)
Automatically Discovering Vulnerabilities Using the Vulnerability Scanner 1. Modify the run_scanner ...
- STL源码剖析:序
STL源码包含哪些内容 容器:STL的核心 适配器:容器都是在一种最底层的基础容器上使用适配器实现 空间配置器:提供内存的管理 迭代器:由于遍历容器中的数据 算法:由于操作容器中的数据,如排序,拷贝, ...
- [redis] -- 过期策略篇
过期处理 定期删除 redis默认是每隔 100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除 惰性删除 定期删除可能会导致很多过期 key 到了时间并没有被删除掉.所以就 ...
- humlbe bundle如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 humlbe bundle如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的 ...
- windows如何解决Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'
问题再现与解读 首次,使用 java 命令+任意参数 都会报这个错误,最典型的就是java -version 解读一下这个报错信息,注册表路径 Software\JavaSoft\Java Runti ...