0

我正在开发一个测验应用程序,我需要在其中获取所有选定的元素或用户答案。这些元素可以是单选输入、复选框输入或文本字段。每个元素都被分配了一个 question_id 属性、 answer_id 和一个 mark 属性。我想要做的是我必须获取这些所有 question_id 、 answer_id 和 mark 属性,以便我可以计算分数,并将 question_id 和 answer_id 发送到数据库,以便我可以将相关的用户答案存储在特定问题下。我已经使用此代码在模板上呈现了测验。

$(data.quiztopics).each(function(index,element){
    $(element.questions).each(function(index,question){
        $(".quiz").append("<form name='question' class= question_"+question.id+"><input type='text' disabled value="+question.question_text+"/><br></form>");
        if(question.question_type=='NUM'){
            $(question.answers).each(function(index,answer){
                $(".question_"+question.id).append("<input type='radio' question_id='+question.id+'answer_id='+answer.id +'name='answer' class=answer_"+answer.id+" mark="+answer.marks+"value="+answer.answer_text+">"+answer.answer_text+"</input>")
            });
        }
        else if(question.question_type=='MCQ'){
            $(question.answers).each(function(index,answer){
                $(".question_"+question.id).append("<input type='checkbox' question_id='+question.id+'answer_id='+answer.id +' name='answer' class=answer_"+answer.id+">"+answer.answer_text+"</input>")
            });
        }
        else if(question.question_type=='FIB'){
            $(question.answers).each(function(index,answer){
                $(".question_"+question.id).append("<input type='text' question_id='+question.id+'answer_id='+answer.id +' name='answer' class=answer_"+answer.id+">"+answer.answer_text+"</input>")
            });
        }
    });
});

告诉我如何获取所选元素的属性以提交测验。

4

3 回答 3

1

我认为这会做到:

var questions = {};

$(".quiz :selected, .quiz :checked, .quiz input[type=text]").each({
   var $this = $(this);
   var question = $this.attr('question_id');
   questions[question] = {
       answer: $this.attr('class'),
   };
});
于 2013-08-21T10:00:41.743 回答
0

它非常简单,你只需要使用element.attr( attributeName )函数

jQuery 文档

一个小JSFIddle让你继续前进

alert("Radio Mark " + $("#one").attr('mark') + ", Radio Value " + $("#one").attr('value'));

alert("check Mark " + $("#two").attr('mark') + ", check Value " + $("#two").attr('value'));
于 2013-08-21T09:39:20.573 回答
0

我通过使用 getElementsByName('answer') 方法通过名称获取 DOM 中可用的所有元素来解决了这个问题。它返回给我一个列表然后循环遍历这个列表我检查了元素是否被检查如果它被检查我得到他们的属性。

attributes_list=new Array()
var answers=document.getElementsByName('answer');
for(i=0;i<answers.length;i++){
    if(answers[i].checked){
            question_id=answers[i].attributes['question_id'].value
            answer_id=answers[i].attributes['answer_id'].value
            attributes_list.push({'que':question_id,'ans':answer_id});
        }
}
于 2013-11-07T11:38:51.883 回答