动态生成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版本问题, 动态生 ...
随机推荐
- PE文件格式详解(六)
0x00 前言 前面两篇讲到了输出表的内容以及涉及如何在hexWorkShop中找到输出表及输入DLL,感觉有几个地方还是没有理解好,比如由数据目录表DataDirectory[16]找到输出表表后以 ...
- 真懂Spring的@Configuration配置类?你可能自我感觉太良好
当大潮退去,才知道谁在裸泳.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...
- day81 初识drf
目录 一.web应用模式 二.API接口 1 rpc(远程过程调用/远程服务调用) 2 restful(资源状态转换) 三.RESTful API规范 四.序列化 五.Django Rest_Fram ...
- Java标识符/数据类型,规范等详解
Java标识符 类名/变量名/方法名都称之为标识符. Java 所有的组成部分都需要名字.类名.变量名以及方法名都被称为标识符. 关于 Java 标识符,有以下几点需要注意: 所有的标识符都应该以字母 ...
- javascript基础(二): 操作BOM对象(重点)
浏览器介绍 javascript和浏览器关系?BOM:浏览器对象模型 IE6~11 Chrome Safari FireFox Opera 三方 QQ浏览器 360浏览器 window window代 ...
- Linux驱动之I2C总线设备以及驱动
[ 导读] 本文通过阅读内核代码,来梳理一下I2C子系统的整体视图.在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,导致没有一个清晰的思路.所以从高层级来分析一下I2C系统的设计思路,将有助于 ...
- webStrom中配置nodejs
1.安装nodejs 下载地址:node.js:https://nodejs.org/download/ 按照提示安装即可 2.安装WebStrom 按照提示安装即可 下载地址:webstorm:ht ...
- C#/VB.NET 在Word中添加条码、二维码
本文介绍如何通过C# 和VB.NET代码实现在Word文档中添加条码和二维码.代码中将分为在Word正文段落中.页眉页脚中等情况来添加. 使用工具:Free Spire.Office for .NET ...
- centos 构建dns服务 dnsmasq
1 安装yum -y install dnsmasq开放udp tcp 53 端口2,修改配置文件 dnsmasq.conf# grep -Ev "^$|^[#;]" /etc/d ...
- Python 为什么用 # 号作注释符?
关于编程语言中的注释,其重要性基本上已为大家所共识. 然而关于注释的规范,这个话题就像我们之前聊过的缩进.终止符和命名方式一样,众口难调. 注释符通常可分为两种,即行注释与块注释(inline/blo ...