JS實現(xiàn)簡單的選擇題測評系統(tǒng)代碼思路詳解(demo)
包含內(nèi)容:JS封裝表單,JS校驗表單
說是測評系統(tǒng),感覺只能算是一個小小的Demo,很水,,沒有數(shù)據(jù)庫庫,,僅使用JS做簡單的選擇題測評系統(tǒng)
--------------------------------------------------------------------------------
一、設(shè)計思路
表單封裝:
【1】由于采用JS封裝提交所以,不需要form標(biāo)簽
【2】放置多個input標(biāo)簽,作為輸入項
【3】編寫JS獲取輸入項,并通過get方式提交到另一個頁面
校驗表單(顯示結(jié)果)
【1】獲取get傳入的參數(shù)
【2】通過JS解析
【3】顯示到相應(yīng)位置
--------------------------------------------------------------------------------
二、參考源碼如下
request.html
<html> <head> <title>考試系統(tǒng)</title> <meta http-equiv="accept-charset" charset="utf-8"> <script src="jquery.min.js"></script> <script type="text/javascript"> function getjson() { var radio = new Array(); for (var i = 1; i <= 5; i++) {//獲取radio的值 var radio_name = new String("radio_" + i); radio[i - 1] = $('input:radio[name=' + radio_name + ']:checked').val() } for (var i = 1; i <= 2; i++) {//獲取checkbox的的輸入 var checkbox_name = new String("checkbox_" + i); var chk_value = []; $('input:checkbox[name=' + checkbox_name + ']:checked').each(function () { chk_value.push($(this).val()); }); radio[i + 4] = "";//置為空 for (var j = 0; j < chk_value.length; j++) { radio[i + 4] = radio[i + 4] + chk_value[j]; } } //數(shù)組轉(zhuǎn)json串 var json = JSON.stringify(radio); return json; } function my_confirm() { var json = getjson(); var msg = "您真的答案是:" + json + ",是否確認提交"; if (confirm(msg) == true) { window.location.href = "result.html?radio=" + 5 + "checkbox=" + 2 + "&json=" + json; } else { return false; } } $(function () { var m = 1; var s = 10; setInterval(function () { if (m >= 0) { if (s < 10) { $('#time').html("剩余時間:" + m + ':0' + s); } else { $('#time').html("剩余時間:" + m + ':' + s); } s--; if (s < 0) { s = 59; m--; } if (m == 0 && s < 1) { window.location.href = "result.html?radio=" + 5 + "checkbox=" + 2 + "&json=" + getjson(); } } }, 1000) }) </script> </head> <body> <h3 style="float: left">2016--2017學(xué)年期末測試題</h3> <div id="time" style="color:red;float: right;margin: 12px 20px 0 0;padding: 0 0 0 0;font-size: xx-large"></div> <br/><br/><br/> <hr/> <h4>一、單選題(每題12分,滿分60分)</h4> 1.當(dāng)方法遇到異常又不知如何處理時,下列() 做法是正確的。<br> <input type="radio" name="radio_1" value="A">A、捕獲異常<br> <input type="radio" name="radio_1" value="B">B、拋出異常<br> <input type="radio" name="radio_1" value="C">C、聲明異常<br> <input type="radio" name="radio_1" value="D">D、嵌套異常<br> 2.下列說法錯誤的是() <br> <input type="radio" name="radio_2" value="A">A、在java中一個類被聲明為final類型,表示該類不能被繼承。<br> <input type="radio" name="radio_2" value="B">B、當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,這叫引用傳遞。<br> <input type="radio" name="radio_2" value="C">C、一個類不能既被聲明為 abstract,又被聲明為final。<br> <input type="radio" name="radio_2" value="D">D、方法的覆蓋(Overriding)和重載(Overloading)是Java多態(tài)性的表現(xiàn),他們沒有區(qū)別。<br> 3.下列創(chuàng)建數(shù)組的方法哪個是錯誤的? <br> <input type="radio" name="radio_3" value="A">A、Date[] arr = new Date[5];<br> <input type="radio" name="radio_3" value="B">B、Date arr[] = new Date[];<br> <input type="radio" name="radio_3" value="C">C、Date arr[][] = new Date[4][5];<br> <input type="radio" name="radio_3" value="D">D、Date arr[][] = new Date[4][];<br> 4.在讀文件Employee.txt 時,可以直接使用該文件作為參數(shù)的類是() <br> <input type="radio" name="radio_4" value="A">A、BufferedReader<br> <input type="radio" name="radio_4" value="B">B、FileInputStream<br> <input type="radio" name="radio_4" value="C">C、DataOutputStream<br> <input type="radio" name="radio_4" value="D">D、DataInputStream<br> 5.下列關(guān)于線程的說法中,錯誤的是? <br> <input type="radio" name="radio_5" value="A">A、線程必須通過方法start() 來啟動。<br> <input type="radio" name="radio_5" value="B">B、線程創(chuàng)建后,其優(yōu)先級是可以改變的。<br> <input type="radio" name="radio_5" value="C">C、實現(xiàn)Runnable接口或者從Thread類派生的線程類沒有區(qū)別。<br> <input type="radio" name="radio_5" value="D">D、當(dāng)對象用synchronized 修飾時,表明該對象在任一時刻只能由一個線程訪問。<br> <br/> <h4>二、多選題(每題20分,滿分40分,錯選、少選、多選不得分)</h4> 6.下列說法正確的是() <br> <input type="checkbox" name="checkbox_1" value="A">A、在java中一個類被聲明為final類型,表示該類不能被繼承。<br> <input type="checkbox" name="checkbox_1" value="B">B、當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,這叫引用傳遞。<br> <input type="checkbox" name="checkbox_1" value="C">C、一個類不能既被聲明為 abstract,又被聲明為final。<br> <input type="checkbox" name="checkbox_1" value="D">D、方法的覆蓋(Overriding)和重載(Overloading)是Java多態(tài)性的表現(xiàn),他們沒有區(qū)別。<br> 7.當(dāng)方法遇到異常又不知如何處理時,下列() 做法是不正確的。<br> <input type="checkbox" name="checkbox_2" value="A">A、捕獲異常<br> <input type="checkbox" name="checkbox_2" value="B">B、拋出異常<br> <input type="checkbox" name="checkbox_2" value="C">C、聲明異常<br> <input type="checkbox" name="checkbox_2" value="D">D、嵌套異常<br> <hr/> <input type="button" onclick="my_confirm()" value="考試完成"> </body> </html>
--------------------------------------------------------------------------------
result.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>考試結(jié)果</title> <script src="jquery.min.js"></script> <script> //獲取url中的參數(shù) function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //構(gòu)造一個含有目標(biāo)參數(shù)的正則表達式對象 var r = window.location.search.substr(1).match(reg); //匹配目標(biāo)參數(shù) if (r != null) return unescape(r[2]); return null; //返回參數(shù)值 } function showResult() { var answer = ["B", "D", "B", "B", "D", "ABC", "ACD"];//標(biāo)準(zhǔn)答案 var answer_score = [12, 12, 12, 12, 12, 20, 20];//答案的分數(shù) var user_answer = JSON.parse(getUrlParam("json"));//獲取用戶答案 var radio_num = parseInt(getUrlParam("radio"));//獲取單選個數(shù) var checkbox_num = parseInt(getUrlParam("checkbox"));//獲取多選個數(shù) var radio_result = 0;//單選分數(shù) var checkbox_result = 0;//多選分數(shù) var radio_right_num = 0;//單選答對個數(shù) var checkbox_right_num = 0;//多選答對個數(shù) var result = 0;//總分數(shù) var user_answer_result = new Array();//用戶沒到題的答題情況 for (var i = 0; i < user_answer.length; i++) { if (user_answer[i] == answer[i]) { if (i < radio_num) { radio_result = radio_result + answer_score[i]; radio_right_num++; } else { checkbox_result = checkbox_result + answer_score[i]; checkbox_right_num++; } user_answer_result[i] = "正確"; } else { user_answer_result[i] = "錯誤"; } } result = checkbox_result + radio_result; //結(jié)果展示 var show_result1; var show_result2; var show_result3; var show_result4; var show_result5; var show_result6; show_result1 = "你的答案結(jié)果為:"; for (var i = 0; i < user_answer.length; i++) { show_result1 = show_result1 + (i + 1) + ":" + user_answer_result[i] + "; "; } show_result2 = "總題目個數(shù):" + user_answer.length; show_result3 = "答對單選題題目個數(shù):" + radio_right_num + "; 得分:" + radio_result; show_result4 = "答對多選題題目個數(shù):" + checkbox_right_num + "; 得分:" + checkbox_result; show_result5 = "答錯題目個數(shù):" + (user_answer.length - radio_right_num - checkbox_right_num); show_result6 = " 本次考試總成績?yōu)椋? + result; $("p#show_result1").html(show_result1); $("p#show_result2").html(show_result2); $("p#show_result3").html(show_result3); $("p#show_result4").html(show_result4); $("p#show_result5").html(show_result5); $("p#show_result6").html(show_result6); } </script> </head> <body> <h2>考試結(jié)束!</h2> <hr/> <input type="button" onclick="showResult()" value="查看結(jié)果"> <p id="show_result1"> <p> <hr/> <p id="show_result2"></p> <p id="show_result3"></p> <p id="show_result4"></p> <p id="show_result5"></p> <hr/> <p id="show_result6"></p> </body> </html>
結(jié)果如下圖:
總結(jié)
以上所述是小編給大家介紹的JS實現(xiàn)簡單的選擇題測評系統(tǒng)代碼思路詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
javascript循環(huán)變量注冊dom事件 之強大的閉包
是在循環(huán)過程過this被改變,注冊過的事件也被隨之改變,找到了一種解決方法2010-09-09JS實現(xiàn)HTML頁面中動態(tài)顯示當(dāng)前時間完整示例
這篇文章主要介紹了JS實現(xiàn)HTML頁面中動態(tài)顯示當(dāng)前時間,結(jié)合完整實例形式分析了JavaScript使用時間函數(shù)setTimeout及clearTimeout動態(tài)顯示當(dāng)前時間相關(guān)操作技巧,非常簡單實用,需要的朋友可以參考下2018-07-07JavaScript在for循環(huán)中綁定事件解決事件參數(shù)不同的情況
響應(yīng)一堆相似的事件,但是每個事件的參數(shù)都不同,在這種情況下就可以使用JavaScript 在for循環(huán)中綁定事件,下面有個不錯的示例,大家可以參考下2014-01-01JavaScript實現(xiàn)簡易飛機大戰(zhàn)
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)簡易飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05