Cara Membuat Kuiz JavaScript Mudah: Tutorial Kod
Pengekodan permainan kuiz JavaScript anda sendiri adalah latihan pembelajaran yang hebat. Ia mengajar anda bagaimana menangani acara, memanipulasi DOM, mengendalikan input pengguna, dan menggunakan storan tempatan untuk mengesan skor mereka. Apabila anda mempunyai kuiz asas dan berjalan, terdapat banyak kemungkinan untuk menambah fungsi yang lebih maju, seperti penomboran.
Dalam tutorial ini, saya akan membimbing anda melalui cara membuat kuiz di JavaScript bahawa anda akan dapat menyesuaikan diri dengan keperluan anda dan menambah ke laman web anda sendiri. Jika anda ingin melihat apa yang akan kami tamat, anda boleh melangkaui dan melihat kod kuiz JavaScript yang berfungsi.
Untuk pengetahuan dan cabaran JavaScript yang lebih mendalam, dapatkan buku percuma kami: belajar kod dengan JavaScript.
perkara yang perlu diperhatikan sebelum memulakan
Berikut adalah beberapa perkara yang perlu diketahui sebelum memulakan:
- Ini adalah tutorial front-end, yang bermaksud sesiapa yang tahu bagaimana untuk melihat melalui kod sumber halaman dapat mencari jawapannya. Untuk kuiz yang serius, data perlu dikendalikan melalui hujung belakang, yang berada di luar skop tutorial ini.
- Kod dalam artikel ini menggunakan sintaks JavaScript moden (ES6), yang bermaksud ia tidak akan serasi dengan mana -mana versi Internet Explorer. Walau bagaimanapun, ia akan berfungsi dengan baik pada pelayar moden, termasuk Microsoft Edge.
- Jika anda perlu menyokong penyemak imbas yang lebih tua, saya telah menulis tutorial kuiz JavaScript yang serasi dengan IE8. Atau, jika anda ingin penyegaran pada ES6, periksa kursus ini oleh Darin Haener di SitePoint Premium.
- Anda memerlukan kebiasaan dengan HTML, CSS, dan JavaScript, tetapi setiap baris kod akan dijelaskan secara individu.
Sebaik -baiknya, kami mahu soalan dan jawapan kuiz berada dalam kod JavaScript kami dan mempunyai skrip kami secara automatik menjana aplikasi kuiz. Dengan cara itu, kita tidak perlu menulis banyak markup berulang, dan kita boleh menambah dan mengeluarkan soalan dengan mudah.
Dalam contoh ini, kami akan menstrukturkan projek kami menggunakan tiga fail utama:
- fail HTML untuk antara muka pengguna asas (UI).
- fail CSS untuk gaya.
- fail JavaScript untuk mengendalikan semua fungsi interaktif.
Apabila belajar bagaimana membuat kuiz di HTML dan JavaScript, penting untuk memahami bagaimana struktur HTML berinteraksi dengan logik JavaScript. Jadi, sebagai langkah pertama, mari kita buat struktur HTML permainan kuiz JavaScript kami.
- A untuk memegang kuiz.
- a
untuk menghantar jawapan. - A
untuk memaparkan hasilnya.inilah cara yang akan kelihatan:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukStruktur ini adalah contoh mudah bagaimana membuat kod HTML kuiz yang berfungsi sebagai asas untuk templat kuiz JavaScript anda. Jika anda menjalankan permohonan sekarang, anda hanya akan melihat butang "Kirim Kuiz".
Langkah 2 - Inisialisasi pembolehubah JavaScript
Sekarang, kita boleh menggunakan javascript document.getElementById kaedah untuk memilih unsur -unsur HTML di atas dan menyimpan rujukan kepada mereka dalam kod kuiz JavaScript seperti di bawah:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukPerkara seterusnya keperluan aplikasi kuiz kami adalah beberapa soalan untuk dipaparkan. Kami akan menggunakan literasi objek JavaScript untuk mewakili soalan individu dan array untuk memegang semua soalan yang membentuk aplikasi kuiz kami. Menggunakan array akan membuat soalan mudah untuk berulang:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukJangan ragu untuk memasukkan banyak soalan atau jawapan yang anda mahukan.
NOTA : Kerana ini adalah array, soalan -soalan akan muncul mengikut urutan yang disenaraikan. Sekiranya anda ingin menyusun soalan -soalan dalam apa jua cara sebelum menyampaikannya kepada pengguna, lihat hujung cepat kami pada menyusun pelbagai objek dalam JavaScript . Langkah 3 - Bina fungsi kuiz
Sekarang kita mempunyai senarai soalan kami, kami dapat menunjukkannya pada halaman. Untuk itu, kami akan menggunakan fungsi bernama BuildQuix (). Mari kita melalui baris JavaScript berikut mengikut baris untuk melihat bagaimana ia berfungsi:
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSeterusnya, kita boleh mula membina HTML untuk setiap soalan. Kita perlu gelung melalui setiap soalan seperti ini:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSekarang mari kita lihat kod di dalam gelung kami:
<span>// we'll want to store the list of answer choices </span><span>const answers = []; </span> <span>// and for each available answer... </span><span>for(letter in currentQuestion.answers){ </span> <span>// ...add an html radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span><span>} </span> <span>// add this question and its answers to the output </span>output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span><span>); </span>
Salin selepas log masukSalin selepas log masukSeterusnya, kami akan menggunakan gelung untuk mengisi jawapan yang mungkin untuk soalan semasa. Untuk setiap pilihan, kami membuat butang radio HTML, yang kami masukkan dalam elemen
di sini, kami menggunakan literals templat, yang merupakan rentetan tetapi lebih kuat. Kami akan menggunakan ciri -ciri berikut literals template:
- keupayaan multi-line.
- tidak perlu menggunakan petikan melarikan diri dalam petikan kerana literasi templat menggunakan backticks.
- interpolasi rentetan membolehkan ekspresi JavaScript menyemai ke dalam rentetan anda seperti ini: $ {code_goes_here}.
Sebaik sahaja kami mempunyai senarai butang jawapan kami, kami boleh menolak soalan HTML dan jawapan HTML ke senarai keseluruhan output kami.
Perhatikan bahawa kami menggunakan templat literal dan beberapa ungkapan tertanam untuk terlebih dahulu membuat soalan Div dan kemudian buat div jawapan. Ekspresi gabungan mengambil senarai jawapan kami dan meletakkannya bersama dalam satu rentetan yang dapat kita hasilkan ke dalam jawapan kami div.
Sekarang bahawa kami telah menjana HTML untuk setiap soalan, kami boleh menyertainya bersama -sama dan menunjukkannya pada halaman:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSekarang, fungsi BuildQuiz kami selesai, dan anda harus dapat menjalankan aplikasi kuiz dan melihat soalan yang dipaparkan.
Walau bagaimanapun, struktur kod anda adalah penting. Oleh kerana sesuatu yang dipanggil Zon Mati Temporal, anda tidak boleh merujuk pelbagai soalan anda sebelum ia ditakrifkan. untuk rekap, ini adalah struktur yang betul:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukPada ketika ini, kami ingin membina fungsi pameran kami untuk gelung atas jawapan, periksa mereka, dan tunjukkan hasilnya. Ini adalah bahagian penting dari mana -mana pelaksanaan JavaScript permainan kuiz, kerana ia memberikan maklum balas segera kepada pengguna berdasarkan prestasi mereka.
inilah fungsi, yang akan kita lalui secara terperinci seterusnya:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukkami akan menggunakan 3 langkah untuk itu:
- mengendalikan apa yang berlaku jika jawapannya betul.
- mengendalikan apa yang berlaku jika jawapannya salah.
- mari kita lihat lebih dekat bagaimana kita mencari jawapan yang dipilih dalam html kami:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDalam baris seterusnya, kami menentukan pemilih CSS yang akan membolehkan kami mencari butang radio yang diperiksa.
Kemudian kami menggunakan QuerySelector JavaScript untuk mencari pemilih CSS kami dalam jawapan yang telah ditetapkan sebelumnya. Pada dasarnya, ini bermakna kita akan mencari butang radio jawapan yang diperiksa.
Akhirnya, kita boleh mendapatkan nilai jawapan itu dengan menggunakan. Nilai.
berurusan dengan input pengguna yang tidak lengkap
Bagaimana jika pengguna telah meninggalkan jawapan kosong? Dalam kes ini, menggunakan. Nilai akan menyebabkan kesilapan kerana anda tidak boleh mendapatkan nilai sesuatu yang tidak ada di sana. Untuk menyelesaikannya, kami telah menambah ||, yang bermaksud "atau", dan {}, yang merupakan objek kosong. Sekarang, pernyataan keseluruhan mengatakan:
- Dapatkan rujukan kepada elemen jawapan yang dipilih atau, jika itu tidak wujud, gunakan objek kosong.
- Dapatkan nilai apa sahaja yang ada dalam pernyataan pertama.
Akibatnya, nilai itu akan menjadi jawapan pengguna atau tidak ditentukan, yang bermaksud pengguna boleh melangkaui soalan tanpa merosakkan aplikasi kuiz kami.
Menilai jawapan dan memaparkan hasil
Kenyataan seterusnya dalam gelung pemeriksaan jawapan kami akan membolehkan kami mengendalikan jawapan yang betul dan tidak betul.
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukJika jawapan pengguna sepadan dengan pilihan yang betul, tingkatkan bilangan jawapan yang betul dengan satu dan (pilihan) warna set pilihan hijau. Sekiranya jawapannya salah atau kosong, warna pilihan jawapan merah (sekali lagi, pilihan).
Sebaik sahaja gelung pemeriksa jawapan selesai, kita dapat menunjukkan berapa banyak soalan pengguna mendapat hak:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDan sekarang kami mempunyai kuiz JavaScript yang bekerja!
Jika anda mahu, anda boleh membungkus seluruh kuiz dalam IIFE (dengan segera menggunakan ekspresi fungsi), yang merupakan fungsi yang berjalan sebaik sahaja anda menentukannya. Ini akan memastikan pembolehubah anda keluar dari skop global dan memastikan aplikasi kuiz anda tidak mengganggu skrip lain yang berjalan di halaman.
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSekarang anda sudah siap! Jangan ragu untuk menambah atau membuang soalan dan jawapan dan gaya kuiz tetapi anda suka.
Sekarang, jika anda menjalankan aplikasi, anda boleh memilih jawapan dan menyerahkan kuiz untuk mendapatkan hasilnya.
Langkah 5 - Menambah Gaya
Sejak sekarang kita mempunyai kuiz kerja, mari kita menjadikannya lebih mesra pengguna dengan menambahkan beberapa gaya. Walau bagaimanapun, saya tidak akan pergi ke butiran setiap gaya. Anda boleh menyalin kod di bawah secara langsung ke dalam fail Styles.css.
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukLangkah 6 - Melaksanakan Pagination
Seperti yang anda lihat dalam imej di atas, soalan dalam kuiz diperintahkan satu demi satu. Kami perlu tatal ke bawah untuk memilih jawapan kami. Walaupun ini kelihatan baik dengan tiga soalan, anda mungkin mula bergelut untuk menjawabnya apabila bilangan soalan meningkat. Oleh itu, kita perlu mencari cara untuk menunjukkan hanya satu soalan pada satu masa melalui penomboran.
Untuk itu, anda perlu:
- cara untuk menunjukkan dan menyembunyikan soalan.
- Butang untuk menavigasi kuiz.
Jadi, mari buat beberapa penyesuaian pada kod kami, bermula dengan HTML:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukKebanyakan markup itu sama seperti sebelumnya, tetapi sekarang kami telah menambah butang navigasi dan bekas kuiz. Bekas kuiz akan membantu kita meletakkan soalan sebagai lapisan yang dapat kita tunjukkan dan menyembunyikan.
Seterusnya, di dalam fungsi BuildQuiz, kita perlu menambah elemen
dengan slaid kelas untuk memegang soalan dan jawapan yang baru kita buat:<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSeterusnya, kita boleh menggunakan beberapa kedudukan CSS untuk membuat slaid duduk sebagai lapisan di atas satu sama lain. Dalam contoh ini, anda akan melihat kami menggunakan z-indeks dan peralihan kelegapan untuk membolehkan slaid kami memudar masuk dan keluar. Inilah yang kelihatan seperti CSS:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSekarang kita akan menambah beberapa JavaScript untuk membuat kerja penomboran. Seperti dahulu, perintah itu penting, jadi ini adalah struktur yang disemak semula kod kami:
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukkita boleh mulakan dengan beberapa pembolehubah untuk menyimpan rujukan ke butang navigasi kami dan menjejaki slaid yang kami lakukan. Tambahkan ini selepas panggilan ke BuildQuiz (), seperti yang ditunjukkan di atas:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSeterusnya kami akan menulis fungsi untuk menunjukkan slaid. Tambahkan ini di bawah fungsi yang sedia ada (BuildQuiz dan ShowResults):
<span>// we'll want to store the list of answer choices </span><span>const answers = []; </span> <span>// and for each available answer... </span><span>for(letter in currentQuestion.answers){ </span> <span>// ...add an html radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span><span>} </span> <span>// add this question and its answers to the output </span>output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span><span>); </span>
Salin selepas log masukSalin selepas log masukinilah yang dilakukan oleh tiga baris pertama:
- Sembunyikan slaid semasa dengan mengeluarkan kelas slaid aktif.
- Tunjukkan slaid baru dengan menambahkan kelas slaid aktif.
- Kemas kini nombor slaid semasa.
baris seterusnya memperkenalkan logik JavaScript berikut:
- Jika kita berada di slaid pertama, sembunyikan butang slaid sebelumnya . Jika tidak, tunjukkan butang.
- Jika kita berada di slaid terakhir, sembunyikan butang slaid seterusnya dan tunjukkan butang hantar . Jika tidak, tunjukkan butang slaid seterusnya dan sembunyikan hantar butang.
Selepas kami menulis fungsi kami, kami boleh segera memanggil Showlide (0) untuk menunjukkan slaid pertama. Ini akan datang selepas kod penomboran:
quizContainer<span>.innerHTML = output.join('');</span>
Salin selepas log masukSeterusnya kita boleh menulis fungsi untuk membuat butang navigasi berfungsi. Ini pergi di bawah fungsi showlide:
<span>// Functions </span><span>function buildQuiz(){ ... } </span><span>function showResults(){ ... } </span> <span>// Variables </span><span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit'); </span><span>const myQuestions = [ ... ]; </span> <span>// Kick things off </span><span>buildQuiz(); </span> <span>// Event listeners </span>submitButton<span>.addEventListener('click', showResults); </span>
Salin selepas log masukdi sini, kami menggunakan fungsi pameran kami untuk membolehkan butang navigasi kami menunjukkan slaid sebelumnya dan slaid seterusnya.
Akhirnya, kita perlu mengaitkan butang navigasi sehingga fungsi ini. Ini datang pada akhir kod:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuksekarang kuiz anda telah bekerja navigasi!
Apa yang akan datang?
Sekarang anda mempunyai aplikasi kuiz JavaScript asas, sudah tiba masanya untuk mendapatkan kreatif dan eksperimen.
Berikut adalah beberapa cadangan yang boleh anda cuba:
- Cuba cara yang berbeza untuk menjawab jawapan yang betul atau jawapan yang salah.
- gaya kuiz dengan baik.
- tambah bar kemajuan.
- biarkan pengguna menyemak jawapan sebelum mengemukakan.
- Beri pengguna ringkasan jawapan mereka selepas mereka menyerahkannya.
- Kemas kini navigasi untuk membiarkan pengguna melangkau ke mana -mana nombor soalan.
- Buat mesej tersuai untuk setiap peringkat hasil. Sebagai contoh, jika seseorang mencatatkan 8/10 atau lebih tinggi, panggil mereka kuiz ninja.
- Tambahkan butang untuk berkongsi hasil di media sosial.
- Simpan skor tinggi anda menggunakan LocalStorage.
- Tambahkan pemasa undur untuk melihat sama ada orang boleh mengalahkan jam.
- Gunakan konsep dari artikel ini ke kegunaan lain, seperti penganggar harga projek, atau kuiz "yang mana-karakter-anda".
Dalam contoh ini, kami menambah soalan mengenai modal Perancis, dengan empat jawapan yang mungkin. Jawapan yang betul ditandakan dengan 'betul: benar'.<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukKod ini secara rawak akan menyusun pelbagai soalan setiap kali halaman dimuatkan.<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDalam contoh ini, kuiz akan berlangsung selama 30 saat. Pemasa akan mengemas kini setiap saat, dan apabila waktunya sudah selesai, amaran akan ditunjukkan.<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masuk<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDalam contoh ini, jika jawapan pengguna tidak betul, amaran akan ditunjukkan dengan jawapan yang betul.
bagaimana saya boleh menambahkan imej kepada soalan?
Anda boleh menambah imej ke soalan anda dengan menambahkan harta 'imej' ke objek soalan. Anda kemudian boleh menggunakan harta ini untuk memaparkan imej dalam HTML anda. Berikut adalah contoh:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDi HTML anda, anda boleh memaparkan imej seperti ini:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDan dalam javascript anda, anda boleh mengemas kini atribut SRC imej semasa memaparkan soalan baru:
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukDalam contoh ini, imej gajah akan dipaparkan apabila soalan ditunjukkan.
bagaimana saya mengendalikan pelbagai jawapan yang betul dalam kuiz javascript?
Mengendalikan pelbagai jawapan yang betul melibatkan membolehkan pengguna memilih lebih daripada satu jawapan dan menyemak jika mana -mana jawapan yang dipilih adalah betul. Sebagai contoh, inilah cara anda boleh mengemas kini fungsi showResults di atas () untuk mengendalikan pelbagai jawapan yang betul.
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Salin selepas log masukSalin selepas log masukSalin selepas log masukSalin selepas log masukAdakah perlu untuk mengekalkan fail JavaScript yang berasingan dan fail CSS?
Mengekalkan fail JavaScript dan CSS yang berasingan bukanlah suatu keharusan. Walau bagaimanapun, ia secara amnya dianggap sebagai amalan terbaik kerana ia meningkatkan kebolehbacaan dan pemeliharaan kod anda.
- a
Atas ialah kandungan terperinci Cara Membuat Kuiz JavaScript Mudah: Tutorial Kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Pembelajaran JavaScript tidak sukar, tetapi ia mencabar. 1) Memahami konsep asas seperti pembolehubah, jenis data, fungsi, dan sebagainya. 2) Pengaturcaraan asynchronous tuan dan melaksanakannya melalui gelung acara. 3) Gunakan operasi DOM dan berjanji untuk mengendalikan permintaan tak segerak. 4) Elakkan kesilapan biasa dan gunakan teknik debugging. 5) Mengoptimumkan prestasi dan mengikuti amalan terbaik.

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

Perbincangan mendalam mengenai punca-punca utama perbezaan dalam output konsol.log. Artikel ini akan menganalisis perbezaan hasil output fungsi Console.log dalam sekeping kod dan menerangkan sebab -sebab di belakangnya. � ...
