0

我做了一个小测验:

var allQuestions = {
    question: {
        question0: {
            question: "What is the meaning of HP?",
            choices: ["Hewlett-Pako", "Holy-Packard", "Hewlett-Packard", "Holy-Bigel"],
            correct: "Hewlett-Packard"
        },
        question1: {
            question: "how much is PI?",
            choices: ["2.54", "3.54", "1.21", "3.14"],
            correct: "3.14"
        },
        question2: {
            question: "Who is Messi?",
            choices: ["basketball player", "soccer player", "gold player", "tennis player"],
            correct: "soccer player"
        },
        question3: {
            question: "What is jQuery?",
            choices: ["JS library", "php library", "sql library", "html library"],
            correct: "JS library"
        }
    },

    correctAnswer: 0
};


function set_client() {//this function is to set the client info the first thing that the function does is to look if the text entered in the inputs is valid, next it will see if localstorage has been set already

    //the blur function test to see if the value entered in the inputs are text if it is then it will let you procced if not it wont let you go further more
    $("#fName,#lName").blur(function(){
        //check to see if the the info given is valid if not it will pop up a sentence that alert for wrong info
        var validfn = /[a-zA-Z]/.test($("input[name='fName']").val());// check to match the if the input is a-z char
        var validln = /[a-zA-Z]/.test($("input[name='lName']").val());// check to match the if the input is a-z char
        if (!validfn || !validln) {
            $("#log").append($("#fool").text("First name and last name must be a-z charcters").fadeIn());
            $("#fool").css({"margin-top":"-10px","margin-right":"-20px"});
        }
        else{ //if there the message already exist and the client entered valid text then the message will be dismiss
            $("#fool").fadeOut();
            return validfn;

        }
    }); //end of the blur function

    //checks to see if localStorage is already has vlaue.
    if (localStorage["fn"] == undefined) {
        $("#contain").hide();
        var data;
        //set the first name and last name to localstorage object for future used when clicking "login"
        $("#sublog").click(function () {
            var validfn1 = /[a-zA-Z]/.test($("input[name='fName']").val());// check to match the if the input is a-z char
            var validln1 = /[a-zA-Z]/.test($("input[name='lName']").val());// check to match the if the input is a-z char
            if (!validfn1 || !validln1) {
                //check blur function from above to see what validfn and valid ln does
            }
            else {
                data = { //and object to store the client firstname and lastname
                    first: $("input[name='fName']").val(),
                    last: $("input[name='lName']").val()
                }
                localStorage["fn"] = JSON.stringify(data["first"]);//client first name
                localStorage["ln"] = JSON.stringify(data["last"]);//client last name
            }
        });
    }
    //if there is already a value to localstorage then it means that someone has already logged in. in which this case it will show a welcome message including his first name and last name.
    else {
        $("#log").replaceWith("<h2>welcome : " + JSON.parse(localStorage['fn']) + " " + JSON.parse(localStorage['ln']) + "</h2>");
    }
}


var allquestion = allQuestions["question"];//just a quick way to access the object

var calcAnswers = allQuestions["correctAnswer"];//just a quick way to access the correctAnswer property object

var qNum = 0; //counts the questions up

var value; //undeclared var

var AnsW = [];

//function that display the question and the choices to the section.
function loadquestions(qNum) {
    if (allquestion["question" + qNum] != undefined) {
        $(".question").text(allquestion["question" + qNum]["question"]); //set the the question to the title
        for (var i = 0; i < allquestion["question" + qNum]["choices"].length;) {
            //loops throughout the li's
            var cH = (allquestion["question" + qNum]["choices"][i]); // a var that holds text of choice in poistion i
            $("label[for=li" + i + "]").text(cH); //define for every label its text
            $("#li" + i).attr("value", cH); //define for every input radio its value which is equals to label which is equals to var cH
            i++;//count i with +1
        }
    }
}
//function that fires when clicked the "next" button and when trigered hides the current question and presents the next one
function checkClientChoice() {
    $("#next").click(function () {
        value = $("input[type='radio']:checked").val(); //gets the value of the choosen radio buttons

        if (value == undefined) { //if the value is undefined throw an error and dont proceed to the next question
            $("#fool").fadeIn();
        }
        else {
            $("#back").css({"visibility":"visible"});
            if (allquestion["question" + qNum]["correct"] == value) { //if the value is same as the correct property in the allQuestions object then add +1 to calcAnswers and +1 to qNum and display the next question
                if ($("#fool").css({display: "block"})) {
                    $("#fool").hide();
                }
                $(".question,ul").fadeToggle(0.0000000001);
                calcAnswers++;
                qNum++;
                $(".question,ul").fadeToggle(1000);
                loadquestions(qNum);
            }
            else { //same here. if the value is not undefined but the client choosen answer is not correct then just count qNum up and load the next question but dont count calcAnswer +1
                if ($("#fool").css({display: "block"})) {
                    $("#fool").hide();
                }
                AnsW.push(value);
                $(".question,ul").fadeToggle(0.0000000000001);
                qNum++;
                $(".question,ul").fadeToggle(1000);
                loadquestions(qNum);
            }
        }
        result();
    });
};

function go_back(){
    $("#back").click(function(){
        qNum--;
        loadquestions(qNum);
        if(calcAnswers <= 0){
            calcAnswers = 0;
        }
        else{
            calcAnswers--;
        }
        var tempQuestion =  allquestion["question" + qNum]["question"];
        alert(tempQuestion);
        var tempAns = AnsW[qNum];//user last answer which is false i need this to make the radio button point to that answer
        alert( $("input[value=tempAns]"));
        $("input[value=tempAns]").is("checked",true);
        alert(tempAns);

        var tempAn = AnsW.splice(-1,1);//delete the false answer from the array i need this to make sure that the answer is deleted and there wont be overload of wrong answers
        alert(tempAn);
    });
}


function result() { //checks to see if the are no more questions to display
    if (allquestion["question" + qNum] == undefined) {
        $(".question").text("your Result is: " + calcAnswers + "/" + qNum);
        $("ul,#next,#back").hide();
    }
}

$(document).ready(function () {
    set_client();
    loadquestions(qNum);
    checkClientChoice();
    go_back();
});

我只是想让我的go_back函数返回并设置前一个单选按钮以通过其值进行检查。我不确定我的编码是否良好,因此如果您愿意,也可以给我反馈

在这里检查我的jsfiddle:http: //jsfiddle.net/boazmier/RkQ9P/1/

4

1 回答 1

1

您正在使用.is(),它只返回一个布尔值,指示是否设置了此属性,它不会改变任何内容。可能您应该使用.attr()实际设置值。

于 2013-06-28T21:32:50.970 回答