选择题,怎么判断选择的答案是否是正确答案?

我获取到一组数据,是选择类题型,我怎么判断是否选对了呢

answera:"奥运会 "
answerb:"亚运会 "
answerc:"残奥会 "
answerd:"大学生运动会 "
id:"1772"
question:"更快、更高、更强是()的格言。 "
rights:"A"

阅读 9k
7 个回答

根据答案来判断呀

截取答案所对应的 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

我认为最简单的方法就是在标签里写value ,然后在和争取答案进行比较

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题