var examineeBehaviour = function () {
var sender = this;
// 题目导航ID前缀
var prefix = '#navigation_';
// 已完成题目的样式
var complateClass = "navigation_question_complate";
// 考试答案
var examinee_answers = new Hashtable();
// 已标识题目
var signcount = 0;
// 命令列表
var commander = new Hashtable();
// 单独警告次数
var warningCount = 0;
// 全体警告次数
var allWarningCount = 0;
// 考生状态
var examState = 1;
// 操作类型
var ExamOperaType = {
交卷: 0,
取消交卷: 1,
提醒: 2,
警告: 3,
取消绑定: 4,
延时: 5,
强制交卷: 6,
取消强制交卷: 7,
举手: 8,
取消举手: 9,
更新状态: 10,
取消控制: 11
}
// 保存答案
var Save = function (question_id, answer) {
examinee_answers.add(question_id, answer);
$("#exam_over").text(examInfo.questionCount - examinee_answers.count());
}
// 单选题
this.Check_rad = function (obj, answerid, questionid) {
cl(questionid);
Save(questionid, answerid);
}
// 多选题
this.Check_chk = function (obj, ctrlName, answerid, questionid) {
var answers = $("input[name=" + ctrlName + "]:checked");
var answer = "";
if (answers.length > 0) {
cl(questionid);
answers.each(function (i, j) {
if (answer.length > 0)
answer += "|";
answer += $(j).val();
});
}
Save(questionid, answer);
}
// 填空题和计算题
this.Check_text = function (obj, answerid, questionid) {
if ($(obj).val().length > 0) {
cl(questionid);
Save(questionid, $(obj).val());
}
}
// 简答题和论述题
this.Check_area = function (obj, answerid, questionid) {
if ($(obj).text().length > 0) {
cl(questionid);
Save(questionid, $(obj).text());
}
}
// 多项填空题
this.Check_text2 = function (obj, ctrlName, answerid, questionid) {
var inputs = $("input[name=" + ctrlName + "]");
if (inputs.filter(function (index) { return $(this).val().length > 0 }).length == inputs.length) {
cl(questionid);
}
var answer = "";
inputs.each(function (i, j) {
if (answer.length > 0)
answer += "|";
answer += clearKeyChar($(j).val());
});
Save(questionid, answer);
}
// 交卷按钮点击事件
$("#btn_takePaper").click(function () {
takePaper();
//sender.setSaftLeaveFlat(true);
});
this.bindSignEvent = function () {
$(".btn_sign").click(function () {
setSign(this);
});
}
// 将答案半角字符修改成全角
var clearKeyChar = function (val) {
return val.replace(/\|/gi, "│")
}
// 屏蔽考试页面
this.togglePapert = function (enabled) {
if (enabled) {
examState = 1;
sender.setSaftLeaveFlat(false);
$("#paper_body").show();
$("#ExamMessage").hide();
//$("#btn_takePaper").val("交 卷");
$("#btn_takePaper").removeAttr("disabled");
} else {
examState = 2;
sender.setSaftLeaveFlat(true);
$("#paper_body").hide();
$("#ExamMessage").show();
//$("#btn_takePaper").val("已交卷");
$("#btn_takePaper").attr("disabled", "disabled");
}
}
this.registTimer = function (len) {
len = len || examinee.lastLength;
sender.setSaftLeaveFlat(false);
$(".timer").calcTimer({
limit: len,
inputType: "s",
format: "#H时#M分#S秒",
ontimeout: function () {
takePaper();
},
onCountdownError: function (container) {
var examLength = Invoke(CMS_SystemConfig.VirtualDirectoryPath + "/OnlineTest/GetLastLengthOfExam", { test_id: examInfo.test_id, userid: examinee.userid });
sender.registTimer(examLength);
}
});
}
this.setSaftLeaveFlat = function (saftleave) {
if (saftleave) {
window.onbeforeunload = null;
}
else {
window.onbeforeunload = function () {
return ('离开考试页面将清除您的答案,且增加考试登录次数!\n请确认是否离开当前考试页面?');
}
}
}
// 处理服务端返回命令
this.handleCommand = function (cmdType, args) {
commander.items(cmdType)(args);
}
// 标识已做题目
var cl = function (id) {
$(prefix + id).addClass(complateClass);
}
// 交卷
var takePaper = function () {
var result = JSON.stringify(examinee_answers.allitems());
debugger
var re = Invoke(CMS_SystemConfig.VirtualDirectoryPath + "/OnlineTest/TakePaper",
{ test_id: examInfo.test_id, userid: examinee.userid, answer: result });
if (re.length > 6)
alert(re);
else {
$('[id$=lbScore]').text("本次考试分数:" + re + "分");
$(".timer").clear();
sender.togglePapert(false);
}
}
// 设置标识
var setSign = function (btn) {
var me = $(btn);
var questionid = $(btn).attr("author");
if (me.hasClass("btn_sign")) {
$(prefix + questionid).addClass("navigation_question_sign");
me.val(' 取消 ');
me.removeClass("btn_sign");
me.addClass("btn_signed");
signcount += 1;
}
else {
$(prefix + questionid).removeClass("navigation_question_sign");
me.val(' 标识 ');
me.removeClass("btn_signed");
me.addClass("btn_sign");
signcount -= 1;
}
$("#exam_sign").text(signcount);
}
// 警告处理
commander.add(ExamOperaType.警告, function (args) {
if (examState == 1) {
if (args.type == 'person') {
warningAlert(personWarring, args.intData);
}
else {
warningAlert(allWarring, args.intData);
}
}
});
commander.add(ExamOperaType.交卷, function (args) {
if (examState == 1) {
takePaper();
}
});
commander.add(ExamOperaType.取消交卷, function (args) {
if (examState == 2) {
examState = 1;
sender.togglePapert(true);
var examLength = Invoke("WaitExam.aspx/CancelTakePaper", { test_id: examInfo.test_id, userid: examinee.userid });
sender.registTimer(examLength);
}
});
commander.add(ExamOperaType.延时, function (args) {
examState = 1;
sender.togglePapert(true);
var examLength = Invoke("WaitExam.aspx/CancelTakePaper", { test_id: examInfo.test_id, userid: examinee.userid });
sender.registTimer(examLength);
});
commander.add(ExamOperaType.取消控制, function (args) {
args.sender.removeExamineeExchangeEvent();
});
var warningAlert = function (warningInfo, count) {
var message = '提示:监考员向您发出警告!请您遵守考场规则。';
var msg = $(warningInfo).filter(function () { return this.key == count; });
if (msg.length > 0) {
message = msg.val();
}
examAlert(message);
}
var examAlert = function (msg) {
radalert("" + msg + "", 400, 210);
}
}