我获取到一组数据,是选择类题型,我怎么判断是否选对了呢
answera:"奥运会 "
answerb:"亚运会 "
answerc:"残奥会 "
answerd:"大学生运动会 "
id:"1772"
question:"更快、更高、更强是()的格言。 "
rights:"A"
我获取到一组数据,是选择类题型,我怎么判断是否选对了呢
answera:"奥运会 "
answerb:"亚运会 "
answerc:"残奥会 "
answerd:"大学生运动会 "
id:"1772"
question:"更快、更高、更强是()的格言。 "
rights:"A"
截取答案所对应的 key的值 截取最后一个元素 (a,b,c,d) 转换为大写 (A,B,C,D) 和 rights字段的value值比较 true就是答对了 false 就是答错了
A:<input type="radio" name="q1" value="A" title=""><br>
B:<input type="radio" name="q1" value="B" title=""><br>
C:<input type="radio" name="q1" value="C" title=""><br>
D:<input type="radio" name="q1" value="D" title=""><br>
<script>
window.onload = function (ev) {
var result = [];
var radio = document.querySelectorAll('input[type=radio]');
for (var i = 0; i < radio.length; i++) {
radio[i].onchange = function (ev2) {
console.log(this.value);
console.log(this.name);
var request = {key: '', value: ''};
request.key = this.name;
request.value = this.value;
console.log(request);
}
}
};
</script>
无论单选多选,你可以弄成键值对的形式(类似于我这种,不过写法上还是有点问题需要你自己处理),然后用你数据库(?)的答案进行比对啊
可以获取ABCD,然后判断ABCD啊,可以是更多选项,也可以是不定项选择
其实这个问题有很多延伸
原始题可以是ABCD,然后随机变化位BCDA(但显示为ABCD等),然后获取选择进行判断
为了简化判断,可以先把获取的答案排序,然后和答案字符串对比。
{
answera:"奥运会 ",
answerb:"亚运会 ",
answerc:"残奥会 ",
answerd:"大学生运动会 ",
id:"1772",
question:"更快、更高、更强是()的格言。 ",
rights:"A"
}
上面的数据结构设计其实是有问题的,比如要求打乱答案,操作就相对繁琐,对于选项来说,应该是并列结构。所以数据结构应该是这样的。
{
answers:["奥运会 ", "亚运会 ", "残奥会 ", "大学生运动会 "],
id:"1772",
question:"更快、更高、更强是()的格言。 ",
rights:0 // 多选时提供多选答案,如([0,1,2])
}
如果后端愿意将接口修改成上面的结构再好不过,如果不愿意,你可以在前端写一个转换一下:
function transformQuestion (qus) {
var rightsOption = qus.rights
var answers = [qus.answera, qus.answerb, qus.answerc, qus.answerd]
// 下面的代码用于支持多选,如 ["A", "C"], "A,C"这两种数据格式
if (typeof rightsOption === 'string') rightsOption = rightsOption.split(',')
var trans = {
multiple: rightsOption.length > 1, // 是否为多选题,答案数量 > 1 时为多选
answers: answers,
rights: rightsOption.map(function (opt) {
var index = opt.toUpperCase().charCodeAt(0) - 65 // 获取选项索引
return answers[index]
}).sort()
}
// 返回核对题目的函数,这里的函数可以继续按细节完善,这里只判断是否完全正确
return function checkUserInput (input) {
if (typeof input === 'string') input = input.split(',')
return trans.rights.join(',') === input.sort().join(',')
}
}
// 测试函数
var question = {
answera:"乒乓球",
answerb:"篮球",
answerc:"橄榄球",
answerd:"足球",
id:"1772",
question:"下列哪些球是圆的?",
rights:"A,B,D" // 正确答案,等效于数组 ['A', 'B', 'D']
}
var check = transformQuestion(question)
// 回答题目
check('乒乓球') // false
check('橄榄球') // false
check('乒乓球,篮球,足球') // true
check(['乒乓球', '篮球', '足球']) // true
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
5 回答2k 阅读
3 回答2.4k 阅读✓ 已解决
根据答案来判断呀