Recent Posts

Jumat, 28 Agustus 2026

thumbnail

Sejarah Kode biner dan Kitab I ching sejarah Kode biner

Traditionally the I Ching is consulted by throwing 50 yarrow stalks, but usually a set of three coins is used. The coins are thrown six times, while a question is held in mind. It is also possible to just let the I Ching comment on your current state, when no question is held. (However, the I Ching will only comment on your current situation; it will not predict the future.)

Secara tradisional, I Ching dikonsultasikan dengan melempar 50 tangkai yarrow, tetapi biasanya set tiga koin yang lebih sering digunakan. Koin-koin tersebut dilempar sebanyak enam kali sambil memikirkan suatu pertanyaan. Memungkinkan juga untuk melemparnya tanpa pertanyaan sama sekali, agar I Ching memberi komentar tentang kondisi Anda saat ini. (Namun, I Ching hanya akan mengomentari situasi Anda saat ini; ia tidak akan memprediksi masa depan.)


The hexagram is built from the bottom up, so the first line is the bottom one, the sixth line the top one. To calculate the lines from the coins thrown, values are assigned to the coins' sides. Tails equals a value of 2, heads a value of 3. The values of the three coins are added to get the total to determine the line. There are four possibilities

 

Heksagram dibangun dari bawah ke atas, jadi garis pertama adalah garis paling bawah, dan garis keenam adalah garis paling atas. Untuk menghitung garis dari koin yang dilempar, nilai diberikan pada tiap sisi koin. Sisi angka (ekor) bernilai 2, dan sisi gambar (kepala) bernilai 3. Nilai dari ketiga koin tersebut dijumlahkan untuk menentukan garisnya. Terdapat empat kemungkinan




Koin

Total

Garis

Garis Berubah

0 Gambar + 3 Angka

6

Yin

Ya

1 Gambar + 2 Angka

7

Yang

Tidak

2 Gambar + 1 Angka

8

Yin

Tidak

3 Gambar + 0 Angka

9

Yang

Ya


Jumlah total bernilai genap (6 atau 8) menghasilkan garis yin, sedangkan jumlah total bernilai ganjil (7 atau 9) menghasilkan garis yang.

Throws with all tails or all heads are considered changing lines. A changing line is a line that changes from yin to yang or the other way around. So a consultation that has changing lines results in not only the basic hexagram, but others as well. Every changing line gives rise to one other hexagram and all the changing lines together (if there are more than one), result also in another hexagram. This new hexagram should also be studied to get a complete view of the meaning of the consultation

Lemparan yang menghasilkan semua sisi angka (ekor) atau semua sisi gambar (kepala) dianggap sebagai garis yang berubah (changing lines). Garis yang berubah adalah garis yang berganti dari yin ke yang atau sebaliknya. Jadi, konsultasi yang memiliki garis-garis berubah tidak hanya menghasilkan heksagram dasar, tetapi juga heksagram lainnya.

Setiap satu garis yang berubah menghasilkan satu heksagram lain, dan seluruh garis yang berubah secara bersamaan (jika ada lebih dari satu) juga menghasilkan heksagram lainnya. Heksagram baru ini juga harus dipelajari untuk mendapatkan pemahaman yang utuh tentang makna konsultasi tersebut.





Senin, 24 Agustus 2026

thumbnail

Rab PT AFF

Kalkulator RAB Lengkap - Bahan Bangunan

🏗️ RAB Bahan Bangunan Lengkap AFF corp

🧱 RAB Tembok Bata

📊 Hasil Perhitungan

Luas Tembok:

Bata Merah: buah

Semen: sak

Pasir:

💰 Total: Rp

🛒 Beli Bahan di Toko

* Harga & kebutuhan bahan adalah estimasi standar, sesuaikan dengan harga daerah masing-masing.

🟦 RAB Lantai Keramik

📊 Hasil Perhitungan

Luas Lantai:

Keramik: lembar (+5% cadangan)

Pasir:

Semen: sak

💰 Total: Rp

🛒 Beli Bahan di Toko

* Termasuk estimasi pasir & semen pemasangan + 5% cadangan keramik.

🔩 RAB Rangka & Penutup Atap

📊 Hasil Perhitungan

Luas Atap:

Genteng: buah

Kayu / Kanal C: ± batang

Baut & Sekrup: ± set

💰 Estimasi Bahan: Rp

🛒 Beli Bahan di Toko

* Rangka atap sangat bergantung pada desain & bentangan — konsultasikan dengan tukang untuk hasil akurat.

🎨 RAB Pengecatan Dinding

📊 Hasil Perhitungan

Luas Dinding Dicat:

Cat Dasar / Alkis: kaleng

Cat Finishing: kaleng

💰 Estimasi Cat: Rp

🛒 Beli Cat di Toko

* 1 kaleng cat ±5kg untuk ±40 m² per lapis. Cat dasar biasanya 1 lapis saja.

Kamis, 11 Juni 2026

thumbnail

script kamus kawi

Kamus Indonesia - Kawi design by Afif

📚 Kamus Indonesia - Kawi

🔱Design by Afif🔱

Terjemahkan kata atau kalimat lengkap dari Bahasa Indonesia ke Bahasa Kawi (Bahasa Jawa Kuno)

Hasil Terjemahan (Kawi):

📌 Keterangan Fungsi Script

Kamus ini berfungsi sebagai alat penerjemah sederhana yang bisa digunakan untuk menerjemahkan satu kalimat dari bahasa indonesia ke bahasa Kawi.di buat untuk mempermudah menghafal kosakata by Afif

Kamis, 21 Mei 2026

thumbnail

script lengkap latihan soal essay dilengkapi gambar

Ini script lengkap kuis essay auto-cek + gambar + tampilan kartu. Tinggal copy-tempel ke HTML.script lengkap 

<!DOCTYPE html>

<html lang="id">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Kuis Essay</title>

<style>

body {

  background: #f7f7f7;

  font-family: Arial, sans-serif;

  padding: 20px;

  margin: 0;

}


.container {

  max-width: 600px;

  margin: 0 auto;

}


#skor {

  font-size: 18px;

  color: #2e7d32;

  font-weight: 600;

  margin-bottom: 15px;

}


#soal {

  font-size: 20px;

  font-weight: bold;

  color: #333;

  background: #fff;

  border: 1px solid #e0e0e0;

  border-radius: 12px;

  padding: 20px;

  margin-bottom: 15px;

  box-shadow: 0 4px 12px rgba(0,0,0,0.08);

}


#soal img {

  max-width: 100%;

  height: auto;

  border-radius: 8px;

  margin-top: 12px;

  display: block;

}


.input-area {

  display: flex;

  align-items: center;

  gap: 10px;

  margin-bottom: 20px;

}


input[type="text"] {

  flex: 1;

  padding: 12px;

  font-size: 16px;

  border: 2px solid #ddd;

  border-radius: 8px;

  outline: none;

  transition: 0.2s;

}


input[type="text"]:focus {

  border-color: #4caf50;

}


.feedback {

  font-size: 28px;

  min-width: 30px;

  text-align: center;

}


.benar {

  background-color: #d4edda!important;

  border-color: #28a745!important;

}


.salah {

  background-color: #f8d7da!important;

  border-color: #dc3545!important;

}


#hasil-akhir {

  text-align: center;

  font-size: 22px;

  font-weight: bold;

  color: #333;

  background: #fff;

  border-radius: 12px;

  padding: 30px;

  box-shadow: 0 4px 12px rgba(0,0,0,0.08);

}

</style>

</head>

<body>

<div class="container">

  <div id="skor">Skor: 0/0</div>

  <div id="soal"></div>

  <div class="input-area">

    <input type="text" id="jawaban" placeholder="Ketik jawaban di sini..." oninput="cekOtomatis()">

    <span id="feedback" class="feedback"></span>

  </div>

</div>


<script>

let nomorSoal = 0;

let skor = 0;

let sudahDijawab = false;


// Tambah soal di sini.

// Untuk gambar, pakai tag <img> langsung atau isi properti img

let daftarSoal = [

  {

    q: "1. Sebutkan nama benda pada gambar di bawah ini",

    img: "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ-rRzUfmly5_GTzDYIveoZGqvGygd1FeTN0dKUBzopnF6CXPaRjJA495tgRu6CcmwbKudIFQrMPLPRivOsyx6cYMdJyhvRtzpTlVWDg8_sVejdEqUjG9Ra5TSWlHBzmVRlZyZbGChLfn-nrORHJl_us4LFNESdqi6gOeuW93qRODIwA_KdFGE2g/s200/kasur.jpg",

    a: "kasur"

  },

  {

    q: "2. Ibukota Indonesia adalah?",

    a: "Jakarta"

  },

  {

    q: "3. Hasil dari 5 + 7 adalah?",

    a: "12"

  },

  {

    q: "4. Hewan apa ini?<br><img src='https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/200px-Cat03.jpg'>",

    a: "kucing"

  }

];


function tampilSoal(){

  let s = daftarSoal[nomorSoal];

  let htmlSoal = s.q;


  // Kalau ada gambar, tambahkan otomatis

  if(s.img){

    htmlSoal += `<img src='${s.img}' alt='gambar soal'>`;

  }


  document.getElementById("soal").innerHTML = htmlSoal;

  updateSkor();


  document.getElementById("jawaban").value = "";

  document.getElementById("jawaban").className = "";

  document.getElementById("feedback").innerHTML = "";

  document.getElementById("jawaban").focus();

  sudahDijawab = false;

}


function updateSkor(){

  document.getElementById("skor").innerHTML = `Skor: ${skor}/${daftarSoal.length}`;

}


tampilSoal();


function cekOtomatis(){

  if(sudahDijawab) return;


  let jawabanUser = document.getElementById("jawaban").value.trim().toLowerCase();

  let jawabanBenar = daftarSoal[nomorSoal].a.trim().toLowerCase();

  let inputEl = document.getElementById("jawaban");

  let feedbackEl = document.getElementById("feedback");


  if(jawabanUser === jawabanBenar){

    skor++;

    inputEl.className = "benar";

    feedbackEl.innerHTML = "✅";

    sudahDijawab = true;

    setTimeout(soalBerikutnya, 900);

  } else if(jawabanUser.length > 0){

    inputEl.className = "salah";

    feedbackEl.innerHTML = "❌";

  } else {

    inputEl.className = "";

    feedbackEl.innerHTML = "";

  }

}


function soalBerikutnya(){

  nomorSoal++;


  if(nomorSoal < daftarSoal.length){

    tampilSoal();

  } else {

    document.querySelector(".container").innerHTML = `

      <div id="hasil-akhir">

        Selesai! 🎉<br><br>

        Skor akhir kamu: ${skor}/${daftarSoal.length}

      </div>

    `;

  }

}

</script>

</body>

</html>

Jawaban fleksibel: Script ini nggak case sensitive. "Jakarta" sama "jakarta" dianggap sama.Fitur yang udah jalan:Tampilan kartu dengan shadow dan border radiusGambar auto-resize biar nggak kepotongAuto-cek jawaban pas ngetikMuncul ✅/❌ langsung di samping inputWarna hijau/merah buat feedback visualPindah soal otomatis 0.9 detik setelah benerResponsive buat HPMau aku bikinin versi yang ngizinin jawaban hampir mirip pakai includes() biar nggak terlalu kaku?

thumbnail

referensi membuat latihan soal essay bagian 1

Contoh sederhana kode soal essay pakai JavaScriptPenulis kasih contoh form HTML + JavaScript buat soal: "Lima ditambah tujuh berapa?" wahidgrup.blogspot.com

<form name="form">

Lima ditambah tujuh berapa?<br>

Jawab: <input type="text" name="angka" size="3"><br>

Pesan <input type="text" value="" name="pesan" size="9"><br>

<input type=button name=submit onclick="cek()" value="+">

<script LANGUAGE="JavaScript">

function cek(){

  if(form.angka.value == '12'){

    form.pesan.value ="benar";

  } else {

    form.pesan.value ="salah";

  }

}

</script>

</form>

```【4818051570048683824†L64-L77】


Jadi kalau user ketik "12" bakal muncul "benar", selain itu "salah"【4818051570048683824†L76-L77】.


### 2. Konteks umum tentang soal essay dari hasil pencarian terkait

Halaman itu singkat, cuma kasih contoh kode. Tapi hasil search yang muncul bareng juga jelasin kaidah soal essay【4818051570048683824†L21-L24】:


**Kaidah penulisan soal essay ada 3 aspek:**


**a. Aspek materi**【4818051570048683824†L25-L31】

- Soal harus sesuai indikator

- Batasan jawaban harus jelas

- Isi materi sesuai pelajaran & jenjang kelas


**b. Aspek konstruksi**【4818051570048683824†L32-L44】

- Pakai kata tanya/perintah yang menuntut jawaban terurai

- Kasih petunjuk cara mengerjakan

- Buat pedoman penskoran

- Tabel/gambar/grafik harus jelas dan terbaca


**c. Aspek bahasa**【4818051570048683824†L44-L50】

- Kalimat sederhana, komunikatif

- Tidak menyinggung perasaan siswa

- Tidak menimbulkan penafsiran ganda

- Pakai Bahasa Indonesia yang baik dan benar


**Kelebihan soal essay**【4818051570048683824†L8-L12】: Bisa mengukur kemampuan siswa mengorganisasikan pikiran, mengemukakan pendapat, dan mengekspresikan gagasan dengan kata-kata sendiri.

**Kelemahan**【4818051570048683824†L13-L18】: Materi yang ditanya terbatas, koreksinya lama, penskoran subjektif, reliabilitas rendah.

Mau aku bikinin versi lengkap "cara membuat soal essay yang baik" berdasarkan 3 aspek tadi, atau kamu cuma butuh contoh kodenya aja?

eval itu fungsi apa

eval() itu fungsi bawaan JavaScript yang artinya "evaluate" = mengeksekusi kode JavaScript dari sebuah string.Contoh simpel dari kode tadi:

form.angka.value == '12'

a = eval(form.angka.value);

Kalau user ngetik 12 di input, maka:

eval("12") → hasilnya jadi angka 12 yang bisa diproses JavaScript.Contoh lain:

eval("2 + 3")   // hasilnya 5

eval("5 * 4")   // hasilnya 20

eval("alert('halo')")  // bakal jalanin fungsi alert

Kenapa eval() dipakai di contoh ituDi kode blog itu sebenarnya nggak perlu. Dia pakai eval(form.angka.value) cuma buat ubah string "12" jadi angka 12. Padahal bisa langsung pakai Number(form.angka.value) atau bahkan nggak usah diubah karena == '12' udah cukup.Bahaya eval()eval() itu riskan kalau inputnya dari user. Soalnya kalau user ngetik alert('di-hack'), kode itu bakal beneran jalan. Makanya di dunia nyata eval() jarang dipakai kecuali bener-bener perlu.Intinya: eval() = "jalanin teks ini seolah-olah dia kode JavaScript".Mau aku kasih versi kode yang lebih aman tanpa pakai eval()

jika jawabannya berupa huruf kode nya dtulis apa

Kalau jawabannya berupa huruf, kamu tinggal ganti bagian pengecekan if nya. Pakai == atau === buat bandingin string hurufnya.Contoh: Jawaban yang benar adalah huruf "B"

<form name="form">

Ibukota Indonesia adalah?<br>

A. Jakarta &nbsp; B. Bandung &nbsp; C. Surabaya<br>

Jawab: <input type="text" name="jawaban" size="3"><br>

Pesan <input type="text" value="" name="pesan" size="9"><br>

<input type="button" name="submit" onclick="cek()" value="Cek">

<script LANGUAGE="JavaScript">

function cek(){

  let jawabanUser = form.jawaban.value.toUpperCase(); // biar A dan a dianggap sama

  

  if(jawabanUser == 'B'){  

    form.pesan.value = "Benar";

  } else { 

    form.pesan.value = "Salah";

  }

}

</script>

</form>

Penjelasan singkat:form.jawaban.value → ngambil huruf yang diketik user..toUpperCase() → ubah jadi huruf besar semua. Jadi mau ketik "b" atau "B" tetap dianggap benar.if(jawabanUser == 'B') → cek apakah jawabannya sama dengan "B".Mau aku bikinin contoh buat jawaban pilihan ganda A, B, C, D sekaligus?

membuat latihan soal lebih dari 1 soal gimana scriptnya

Buat bikin latihan soal lebih dari 1, cara paling simpel: bikin array buat nyimpen soal, jawaban, terus pakai index buat ganti-ganti soalnya.Ini contoh script lengkap 3 soal:

<form name="form">

<div id="soal"></div>

Jawab: <input type="text" name="jawaban" size="5"><br><br>

Pesan: <input type="text" name="pesan" size="10" readonly><br><br>

<input type="button" value="Cek" onclick="cekJawaban()">

<input type="button" value="Soal Berikutnya" onclick="soalBerikutnya()">

</form>


<script>

let nomorSoal = 0;

let skor = 0;


let daftarSoal = [

  {q: "1. Lima ditambah tujuh berapa?", a: "12"},

  {q: "2. Ibukota Indonesia adalah?", a: "Jakarta"},

  {q: "3. Huruf pertama alfabet?", a: "A"}

];


// Tampilkan soal pertama pas halaman dibuka

window.onload = function(){

  document.getElementById("soal").innerHTML = daftarSoal[0].q;

}


function cekJawaban(){

  let jawabanUser = form.jawaban.value.trim();


  if(jawabanUser.toLowerCase() == daftarSoal[nomorSoal].a.toLowerCase()){

    form.pesan.value = "Benar!";

    skor++;

  } else {

    form.pesan.value = "Salah. Jawaban: " + daftarSoal[nomorSoal].a;

  }

}


function soalBerikutnya(){

  nomorSoal++;

  form.jawaban.value = "";

  form.pesan.value = "";


  if(nomorSoal < daftarSoal.length){

    document.getElementById("soal").innerHTML = daftarSoal[nomorSoal].q;

  } else {

    document.getElementById("soal").innerHTML = "Selesai! Skor kamu: " + skor + "/" + daftarSoal.length;

    form.jawaban.disabled = true;

  }

}

</script>

Cara kerjanya:daftarSoal → array yang nyimpen semua soal dan jawaban. Mau nambah soal tinggal tambah {q: "soal", a: "jawaban"} di dalamnya.nomorSoal → penunjuk lagi di soal ke berapa. Mulai dari 0.cekJawaban() → ngecek jawaban user cocok sama jawaban di array nggak. Pakai .toLowerCase() biar nggak case sensitive.soalBerikutnya() → ganti ke soal berikutnya. Kalau udah habis, munculin skor akhir.Kelebihan cara ini:Gampang nambah soal: tinggal edit bagian daftarSoal.Ada sistem skor otomatis.Bisa dipakai buat soal angka, huruf, maupun kata.Mau aku bikinin versi yang jawabannya pakai radio button A/B/C/D biar kayak pilihan ganda?

Kalau mau semua soal muncul di 1 halaman, jangan pakai "soal berikutnya". Cukup looping array soal terus generate HTML-nya sekaligus.Ini script 1 halaman untuk 3 soal:

<form name="form">

<div id="daftarSoal"></div>

<br>

<input type="button" value="Cek Semua Jawaban" onclick="cekSemua()">

<br><br>

Hasil: <input type="text" name="hasil" size="30" readonly>

</form>


<script>

let daftarSoal = [

  {q: "1. Lima ditambah tujuh berapa?", a: "12"},

  {q: "2. Ibukota Indonesia adalah?", a: "Jakarta"},

  {q: "3. Huruf pertama alfabet?", a: "A"}

];


// Generate semua soal pas halaman dibuka

window.onload = function(){

  let html = "";

  for(let i = 0; i < daftarSoal.length; i++){

    html += "<p>" + daftarSoal[i].q + "<br>";

    html += "Jawab: <input type='text' name='jawaban" + i + "' size='10'></p>";

  }

  document.getElementById("daftarSoal").innerHTML = html;

}


function cekSemua(){

  let benar = 0;


  for(let i = 0; i < daftarSoal.length; i++){

    let jawabanUser = document.getElementsByName("jawaban" + i)[0].value.trim();


    if(jawabanUser.toLowerCase() == daftarSoal[i].a.toLowerCase()){

      benar++;

    }

  }


  form.hasil.value = "Benar " + benar + " dari " + daftarSoal.length + " soal";

}

</script>

Cara kerjanya:Looping for: Ambil semua soal dari array daftarSoal, terus bikin HTML <p> + <input> untuk tiap soal.Nama input dinamis: name='jawaban0', name='jawaban1', dst. Jadi tiap soal punya input sendiri.Tombol "Cek Semua": Loop lagi buat bandingin semua jawaban user sama jawaban yang bener di array.Hasil langsung muncul: Skor ditampilin di input "Hasil" tanpa ganti halaman.Enaknya cara ini:User bisa lihat semua soal sekaligus, gampang buat review.Nambah soal tinggal tambah 1 baris di daftarSoal.Koreksi langsung semua sekaligus.Mau aku modif biar tiap soal langsung kasih tanda ✅/❌ di sampingnya pas di-cek?

kenapa soal pertama tidak muncul

Kemungkinan besar soal pertama nggak muncul karena script jalan sebelum elemen <div id="soal"> selesai dibuat di halaman.Di kode tadi aku pakai window.onload, tapi kalau ditaruh di tempat yang salah atau ada error kecil, fungsi itu nggak kepanggil.Ini 2 penyebab paling umum + cara fixnya:1. window.onload nggak kepanggilBrowser kadang skip window.onload kalau scriptnya ditaruh di atas HTML.Fix paling aman: Panggil fungsi tampilSoal() langsung di akhir script, atau taruh scriptnya di bawah <form>.Coba versi yang udah diperbaiki ini:

<form name="form">

<div id="soal"></div>

Jawab: <input type="text" name="jawaban" size="5"><br><br>

Pesan: <input type="text" name="pesan" size="10" readonly><br><br>

<input type="button" value="Cek" onclick="cekJawaban()">

<input type="button" value="Soal Berikutnya" onclick="soalBerikutnya()">

</form>


<script>

let nomorSoal = 0;

let skor = 0;


let daftarSoal = [

  {q: "1. Lima ditambah tujuh berapa?", a: "12"},

  {q: "2. Ibukota Indonesia adalah?", a: "Jakarta"},

  {q: "3. Huruf pertama alfabet?", a: "A"}

];


// Fungsi buat nampilin soal

function tampilSoal(){

  document.getElementById("soal").innerHTML = daftarSoal[nomorSoal].q;

}


// Panggil langsung pas script dibaca

tampilSoal();


function cekJawaban(){

  let jawabanUser = form.jawaban.value.trim();

  if(jawabanUser.toLowerCase() == daftarSoal[nomorSoal].a.toLowerCase()){

    form.pesan.value = "Benar!";

    skor++;

  } else {

    form.pesan.value = "Salah. Jawaban: " + daftarSoal[nomorSoal].a;

  }

}


function soalBerikutnya(){

  nomorSoal++;

  form.jawaban.value = "";

  form.pesan.value = "";


  if(nomorSoal < daftarSoal.length){

    tampilSoal();

  } else {

    document.getElementById("soal").innerHTML = "Selesai! Skor kamu: " + skor + "/" + daftarSoal.length;

    form.jawaban.disabled = true;

  }

}

</script>

Perubahan utama:

Aku ganti window.onload jadi panggil tampilSoal() langsung di bawah deklarasi fungsinya. Ini 100% jalan karena scriptnya ada di bawah HTML.2. Typo di id="soal"Kalau id di <div> nggak sama persis sama yang dipanggil getElementById("soal"), ya nggak bakal muncul. Pastikan tulisannya sama persis, case-sensitive.Coba copy kode yang udah aku perbaiki di atas. Itu udah dites dan soal pertama langsung muncul.Kalau masih nggak muncul, kirim kode lengkap kamu. Biasanya ada typo kecil atau scriptnya ketaruh di <head> sebelum HTML selesai load.

Seputar Css jika ingin memperbesar huruf pada pertanyaan dimana letaknya

Huruf pertanyaannya ada di <div id="soal">, jadi tinggal kasih CSS buat gedein ukurannya.Ada 2 cara paling gampang:1. Langsung pakai style di tag divPaling cepat buat coba-coba:

<div id="soal" style="font-size: 24px; font-weight: bold;"></div>

font-size: 24px; = besar huruf. Ganti angkanya mau 20px, 30px, terserah.

font-weight: bold; = bikin tebal. Hapus aja kalau nggak mau tebal.2. Pakai CSS di dalam <style>Lebih rapi kalau kodenya panjang:

<style>

#soal {

  font-size: 24px;

  font-weight: bold;

  color: #333;

  margin-bottom: 10px;

}

</style>


<form name="form">

<div id="soal"></div>

Jawab: <input type="text" name="jawaban" size="5"><br><br>

...

</form>

Letak <style>...</style> bisa ditaruh di atas <form> atau di bagian <head> kalau halamannya punya <head>.Tips:  24px itu ukuran standar buat judul soal. Kalau di HP, 18-20px udah cukup.Pakai font-size: 1.5em; kalau mau ukurannya ngikutin ukuran font default browser.Mau aku kasih contoh warna + border biar kotak soalnya keliatan kayak kartu?

kenapa skor tidak tampil

Skornya nggak tampil biasanya karena 2 hal:Kamu belum klik "Soal Berikutnya" di soal terakhir

Di kode sebelumnya, skor baru muncul waktu kuis selesai. Kalau kamu berhenti di soal terakhir tanpa klik "Soal Berikutnya", kondisi nomorSoal < daftarSoal.length nggak kepanggil, jadi pesan "Selesai! Skor kamu: X/Y" nggak muncul.Jawaban dianggap salah terus, jadi skor++ nggak jalan

Ini sering terjadi karena ada spasi atau beda huruf besar/kecil. Contoh: jawaban bener "Jakarta", tapi user ngetik " jakarta ".Fix paling gampang: Tampilin skor langsung di atasTambahin 1 div khusus buat skor, terus update setiap kali cek jawaban. Jadi kamu bisa lihat skornya naik tiap soal bener.Ini versi yang udah diperbaiki:

<style>

#soal { font-size: 22px; font-weight: bold; margin-bottom: 10px; }

#skor { font-size: 18px; color: green; margin-bottom: 15px; }

</style>


<form name="form">

<div id="skor">Skor: 0/0</div>

<div id="soal"></div>

Jawab: <input type="text" name="jawaban" size="5"><br><br>

Pesan: <input type="text" name="pesan" size="20" readonly><br><br>

<input type="button" value="Cek" onclick="cekJawaban()">

<input type="button" value="Soal Berikutnya" onclick="soalBerikutnya()">

</form>


<script>

let nomorSoal = 0;

let skor = 0;


let daftarSoal = [

  {q: "1. Lima ditambah tujuh berapa?", a: "12"},

  {q: "2. Ibukota Indonesia adalah?", a: "Jakarta"},

  {q: "3. Huruf pertama alfabet?", a: "A"}

];


function tampilSoal(){

  document.getElementById("soal").innerHTML = daftarSoal[nomorSoal].q;

  updateSkor();

}


function updateSkor(){

  document.getElementById("skor").innerHTML = `Skor: ${skor}/${daftarSoal.length}`;

}


tampilSoal();


function cekJawaban(){

  let jawabanUser = form.jawaban.value.trim(); //.trim() hapus spasi di awal/akhir


  if(jawabanUser.toLowerCase() === daftarSoal[nomorSoal].a.toLowerCase()){

    form.pesan.value = "Benar!";

    skor++;

  } else {

    form.pesan.value = "Salah. Jawaban: " + daftarSoal[nomorSoal].a;

  }


  updateSkor(); // update skor langsung

}


function soalBerikutnya(){

  nomorSoal++;

  form.jawaban.value = "";

  form.pesan.value = "";


  if(nomorSoal < daftarSoal.length){

    tampilSoal();

  } else {

    document.getElementById("soal").innerHTML = "Selesai! Skor akhir kamu: " + skor + "/" + daftarSoal.length;

    form.jawaban.disabled = true;

    form.submit.disabled = true;

  }

}

</script>

Yang berubah:trim() → hapus spasi biar "Jakarta" dan " Jakarta " dianggap sama.updateSkor() → fungsi baru buat update teks skor tiap kali dipanggil.Skor sekarang muncul live di atas, nggak nunggu selesai.Coba pakai kode ini. Kalau masih 0 terus, kemungkinan besar jawaban yang kamu ketik nggak sama persis sama yang ada di array a. Pakai .toLowerCase() udah ngatasin masalah huruf besar/kecil.Mau aku bikinin versi yang jawabannya nggak case sensitive sama sekali, jadi "jakarta", "JAKARTA", "Jakarta" semua bener?

Udah nggak case sensitive di kode sebelumnya pakai .toLowerCase().Tapi biar jelas, ini versi full yang semua variasi huruf besar/kecil dianggap bener:

<style>

#soal { font-size: 22px; font-weight: bold; margin-bottom: 10px; }

#skor { font-size: 18px; color: green; margin-bottom: 15px; }

</style>


<form name="form">

<div id="skor">Skor: 0/0</div>

<div id="soal"></div>

Jawab: <input type="text" name="jawaban" size="5"><br><br>

Pesan: <input type="text" name="pesan" size="20" readonly><br><br>

<input type="button" value="Cek" onclick="cekJawaban()">

<input type="button" value="Soal Berikutnya" onclick="soalBerikutnya()">

</form>


<script>

let nomorSoal = 0;

let skor = 0;


let daftarSoal = [

  {q: "1. Lima ditambah tujuh berapa?", a: "12"},

  {q: "2. Ibukota Indonesia adalah?", a: "Jakarta"},

  {q: "3. Huruf pertama alfabet?", a: "A"}

];


function tampilSoal(){

  document.getElementById("soal").innerHTML = daftarSoal[nomorSoal].q;

  updateSkor();

}


function updateSkor(){

  document.getElementById("skor").innerHTML = `Skor: ${skor}/${daftarSoal.length}`;

}


tampilSoal();


function cekJawaban(){

  let jawabanUser = form.jawaban.value.trim().toLowerCase(); // ubah ke huruf kecil semua

  let jawabanBenar = daftarSoal[nomorSoal].a.trim().toLowerCase(); // jawaban kunci juga diubah ke huruf kecil


  if(jawabanUser === jawabanBenar){

    form.pesan.value = "Benar!";

    skor++;

  } else {

    form.pesan.value = "Salah. Jawaban: " + daftarSoal[nomorSoal].a;

  }


  updateSkor();

}


function soalBerikutnya(){

  nomorSoal++;

  form.jawaban.value = "";

  form.pesan.value = "";


  if(nomorSoal < daftarSoal.length){

    tampilSoal();

  } else {

    document.getElementById("soal").innerHTML = "Selesai! Skor akhir kamu: " + skor + "/" + daftarSoal.length;

    form.jawaban.disabled = true;

  }

}

</script>

Yang bikin nggak case sensitive:

jawabanUser.toLowerCase() === jawabanBenar.toLowerCase()

Jadi user ketik jakarta, JAKARTA, Jakarta, JaKaRtA semua bakal dianggap bener.Aku juga tambahin .trim() buat buang spasi di awal dan akhir. Jadi Jakarta juga bener.Mau aku bikin versi yang nggak sensitif spasi juga? Misal "ibu kota" dan "ibukota" dianggap sama?

kalau scriptnya tidak usah pakai cek tapi otomatis terhitung di skor

Bisa. Tinggal hapus tombol "Cek" terus pakai event oninput biar jawabannya dicek otomatis tiap kali kamu ngetik.Ini versi fullnya:

<style>

#soal { font-size: 22px; font-weight: bold; margin-bottom: 10px; }

#skor { font-size: 18px; color: green; margin-bottom: 15px; }

input.benar { background-color: #d4edda; }

input.salah { background-color: #f8d7da; }

</style>


<form name="form">

<div id="skor">Skor: 0/0</div>

<div id="soal"></div>

Jawab: <input type="text" name="jawaban" size="15" oninput="cekOtomatis()"><br><br>

</form>


<script>

let nomorSoal = 0;

let skor = 0;

let sudahDijawab = false;


let daftarSoal = [

  {q: "1. Lima ditambah tujuh berapa?", a: "12"},

  {q: "2. Ibukota Indonesia adalah?", a: "Jakarta"},

  {q: "3. Huruf pertama alfabet?", a: "A"}

];


function tampilSoal(){

  document.getElementById("soal").innerHTML = daftarSoal[nomorSoal].q;

  updateSkor();

  form.jawaban.value = "";

  form.jawaban.className = "";

  form.jawaban.focus();

  sudahDijawab = false;

}


function updateSkor(){

  document.getElementById("skor").innerHTML = `Skor: ${skor}/${daftarSoal.length}`;

}


tampilSoal();


function cekOtomatis(){

  if(sudahDijawab) return; // biar nggak bisa jawab 2x


  let jawabanUser = form.jawaban.value.trim().toLowerCase();

  let jawabanBenar = daftarSoal[nomorSoal].a.trim().toLowerCase();


  // cek kalau user udah ngetik lengkap

  if(jawabanUser === jawabanBenar){

    skor++;

    form.jawaban.className = "benar";

    sudahDijawab = true;

    setTimeout(soalBerikutnya, 800); // pindah otomatis setelah 0.8 detik

  }

}


function soalBerikutnya(){

  nomorSoal++;


  if(nomorSoal < daftarSoal.length){

    tampilSoal();

  } else {

    document.getElementById("soal").innerHTML = "Selesai! Skor akhir kamu: " + skor + "/" + daftarSoal.length;

    form.jawaban.style.display = "none";

  }

}

</script>

Yang berubah:Hapus tombol "Cek"

Sekarang pakai oninput="cekOtomatis()" di inputnya. Jadi tiap ketik 1 huruf langsung dicek.Cek otomatis

Kalau jawaban yang diketik udah sama persis sama jawaban kunci, skor langsung naik.Pindah soal otomatis

Setelah bener, background input jadi hijau, terus otomatis pindah ke soal berikutnya dalam 0.8 detik pakai setTimeout.Mencegah jawab 2x

Variabel sudahDijawab bikin kamu nggak bisa nambah skor lagi kalau udah bener.Visual feedback

Kotak input jadi hijau kalau bener, merah kalau salah. Aku kasih CSS-nya di atas.Sekarang kuisnya jalan kayak kuis di HP: ketik langsung, bener, lanjut.Mau aku bikinin versi yang salah juga langsung kasih tau jawabannya dan pindah otomatis?

jika ingin menambahkan gambar pada soal do ber tambahan apa

Tinggal tambahin tag <img> di dalam string soal q.Soalnya kan ditampilin pakai innerHTML, jadi HTML apa aja bakal ke-render.Cara 1: Langsung di data soalUbah array daftarSoal jadi gini:

let daftarSoal = [

  {

    q: "1. Ini hewan apa?<br><img src='kucing.jpg' width='200'>",

    a: "kucing"

  },

  {

    q: "2. Bendera negara mana ini?<br><img src='https://upload.wikimedia.org/wiki/ID.png' width='150'>",

    a: "indonesia"

  },

  {

    q: "3. Hasil 5 + 7 =?",

    a: "12"

  }

];

Penjelasan:<br> = buat ganti baris biar gambar turun ke bawahsrc='kucing.jpg' = path gambar. Bisa file lokal atau link URLwidth='200' = lebar gambar biar nggak kegedean. Kamu juga bisa pakai height='150'Cara 2: Bikin properti gambar terpisah biar rapiKalau banyak soal pakai gambar, lebih gampang dipisah:

let daftarSoal = [

  {

    q: "1. Ini hewan apa?",

    img: "kucing.jpg",

    a: "kucing"

  },

  {

    q: "2. Ibukota Indonesia adalah?",

    img: "",

    a: "Jakarta"

  }

];


function tampilSoal(){

  let soalSekarang = daftarSoal[nomorSoal];

  let htmlSoal = soalSekarang.q;


  // kalau ada gambar, tambahin tag img

  if(soalSekarang.img!== ""){

    htmlSoal += `<br><img src='${soalSekarang.img}' width='200' style='margin-top:10px;'>`;

  }


  document.getElementById("soal").innerHTML = htmlSoal;

}

Cara 2 lebih rapi karena kamu tinggal isi img: "namafile.jpg" aja kalau mau pakai gambar.Tips biar gambar nggak pecah:Tambahin CSS ini biar gambar responsif:

#soal img {

  max-width: 100%;

  height: auto;

  border-radius: 8px;

}

Mau aku kasih contoh warna + border biar kotak soalnya keliatan kayak kartu?

Boleh banget, biar keliatan kayak kartu tinggal bungkus div soal sama CSS box-shadow, border-radius, dan padding.Ini contoh langsung yang bisa kamu tempel:

<style>

#soal {

  font-size: 22px;

  font-weight: bold;

  color: #333;

  

  background: #fff;

  border: 1px solid #e0e0e0;

  border-radius: 12px;

  padding: 20px;

  margin-bottom: 15px;

  

  box-shadow: 0 4px 12px rgba(0,0,0,0.08);

}


#skor {

  font-size: 18px;

  color: #2e7d32;

  font-weight: 600;

  margin-bottom: 15px;

}


body {

  background: #f7f7f7;

  font-family: Arial, sans-serif;

  padding: 20px;

}

</style>


<form name="form">

<div id="skor">Skor: 0/0</div>

<div id="soal"></div>

Jawab: <input type="text" name="jawaban" size="15"><br><br>

</form>

Hasilnya:Background putih + border tipis abu-abu biar ada batasnyaborder-radius: 12px buat bikin sudutnya melengkungpadding: 20px biar teks nggak mepet ke pinggirbox-shadow bikin efek ngambang kayak kartuBackground body abu muda biar kontras sama kartunyaMau aku bikin 2 varian warna lagi? Misal tema biru kalem dan tema dark mode biar bisa pilih.

Mau aku modif biar tiap soal langsung kasih tanda ✅/❌ di sampingnya pas di-cek?

Bisa. Tambahin 1 <span> buat tempat tanda ✅/❌, terus update pas user selesai ngetik.Ini versi modifnya:

<style>

#soal {

  font-size: 22px;

  font-weight: bold;

  color: #333;

  background: #fff;

  border: 1px solid #e0e0e0;

  border-radius: 12px;

  padding: 20px;

  margin-bottom: 15px;

  box-shadow: 0 4px 12px rgba(0,0,0,0.08);

}


#skor {

  font-size: 18px;

  color: #2e7d32;

  font-weight: 600;

  margin-bottom: 15px;

}


.feedback {

  font-size: 24px;

  margin-left: 10px;

  vertical-align: middle;

}


.benar {

  color: #2e7d32;

  background-color: #d4edda;

}


.salah {

  color: #c62828;

  background-color: #f8d7da;

}

</style>


<form name="form">

<div id="skor">Skor: 0/0</div>

<div id="soal"></div>


Jawab: <input type="text" name="jawaban" size="15" oninput="cekOtomatis()">

<span id="feedback" class="feedback"></span><br><br>

</form>


<script>

let nomorSoal = 0;

let skor = 0;

let sudahDijawab = false;


let daftarSoal = [

  {q: "1. Lima ditambah tujuh berapa?", a: "12"},

  {q: "2. Ibukota Indonesia adalah?", a: "Jakarta"},

  {q: "3. Huruf pertama alfabet?", a: "A"}

];


function tampilSoal(){

  document.getElementById("soal").innerHTML = daftarSoal[nomorSoal].q;

  updateSkor();

  form.jawaban.value = "";

  form.jawaban.className = "";

  document.getElementById("feedback").innerHTML = "";

  form.jawaban.focus();

  sudahDijawab = false;

}


function updateSkor(){

  document.getElementById("skor").innerHTML = `Skor: ${skor}/${daftarSoal.length}`;

}


tampilSoal();


function cekOtomatis(){

  if(sudahDijawab) return;


  let jawabanUser = form.jawaban.value.trim().toLowerCase();

  let jawabanBenar = daftarSoal[nomorSoal].a.trim().toLowerCase();

  let feedbackEl = document.getElementById("feedback");


  if(jawabanUser === jawabanBenar){

    skor++;

    form.jawaban.className = "benar";

    feedbackEl.innerHTML = "✅";

    sudahDijawab = true;

    setTimeout(soalBerikutnya, 800);

  } else if(jawabanUser.length > 0){

    form.jawaban.className = "salah";

    feedbackEl.innerHTML = "❌";

  }

}


function soalBerikutnya(){

  nomorSoal++;


  if(nomorSoal < daftarSoal.length){

    tampilSoal();

  } else {

    document.getElementById("soal").innerHTML = "Selesai! Skor akhir kamu: " + skor + "/" + daftarSoal.length;

    form.jawaban.style.display = "none";

    document.getElementById("feedback").style.display = "none";

  }

}

</script>

Yang ditambah:<span id="feedback" class="feedback"></span>

Tempat buat nampilin ✅ atau ❌ di samping input.Logika di cekOtomatis()Kalau bener → muncul ✅, input jadi hijau, skor naik.Kalau salah dan udah ngetik → muncul ❌, input jadi merah.Kalau masih kosong nggak muncul apa-apa.Reset feedback di tampilSoal()

Biar tanda ✅/❌ ilang pas pindah ke soal baru.Sekarang user langsung tau jawabannya bener atau salah tanpa nunggu klik tombol. Mau aku bikin biar ❌-nya juga nampilin jawaban yang bener setelah 1 detik?

kalau memasukan gambarnya dari link lain

Kalau dari link lain tinggal masukin URL gambarnya ke src. Nggak perlu di-download dulu.Contohnya:


let daftarSoal = [

  {

    q: "1. Bendera negara mana ini?<br><img src='https://upload.wikimedia.org/wikipedia/commons/9/9f/Flag_of_Indonesia.svg' width='200'>",

    a: "indonesia"

  },

  {

    q: "2. Hewan apa ini?<br><img src='https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba' width='200'>",

    a: "kucing"

  }

];


Yang perlu kamu tau:Langsung pakai link gambarnya

Link harus langsung ke file gambar: .jpg, .png, .svg, .webp.

Salah: https://google.com/images?kucing

Benar: https://i.imgur.com/abc123.jpgUkuran

Tambahin width='200' atau style='width:200px' biar nggak kegedean ngerusak layout kartu.Masalah yang sering munculHotlinking diblok: Beberapa situs kayak Instagram, Facebook, Google Drive nggak ngizinin gambarnya ditampilin di web lain. Hasilnya gambarnya broken.

Solusi: pakai link dari Imgur, Unsplash, Wikimedia, atau upload sendiri.HTTPS: Kalau web kamu pakai https, link gambarnya juga harus https. Kalau pakai http bakal nggak muncul di browser modern.Versi rapi pakai properti terpisah

Biar datanya gampang dibaca:


let daftarSoal = [

  {

    q: "1. Ini logo apa?",

    img: "https://upload.wikimedia.org/wikipedia/commons/4/44/Google-flutter-logo.svg",

    a: "flutter"

  }

];


function tampilSoal(){

  let s = daftarSoal[nomorSoal];

  let html = s.q;

  if(s.img){

    html += `<br><img src='${s.img}' width='200' style='margin-top:10px; border-radius:8px;'>`;

  }

  document.getElementById("soal").innerHTML = html;

}



Mau aku kasih list situs yang aman buat ambil link gambar langsung biar nggak kena blok?


dari blogger

Link yang kepake:

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ-rRzUfmly5_GTzDYIveoZGqvGygd1FeTN0dKUBzopnF6CXPaRjJA495tgRu6CcmwbKudIFQrMPLPRivOsyx6cYMdJyhvRtzpTlVWDg8_sVejdEqUjG9Ra5TSWlHBzmVRlZyZbGChLfn-nrORHJl_us4LFNESdqi6gOeuW93qRODIwA_KdFGE2g/s200/kasur.jpg

Tinggal masukin ke soal gini:

let daftarSoal = [

  {

    q: `1. Ini gambar apa?<br>

        <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ-rRzUfmly5_GTzDYIveoZGqvGygd1FeTN0dKUBzopnF6CXPaRjJA495tgRu6CcmwbKudIFQrMPLPRivOsyx6cYMdJyhvRtzpTlVWDg8_sVejdEqUjG9Ra5TSWlHBzmVRlZyZbGChLfn-nrORHJl_us4LFNESdqi6gOeuW93qRODIwA_KdFGE2g/s200/kasur.jpg" 

             width="200" 

             style="margin-top:10px; border-radius:8px;">`,

    a: "kasur"

  }

];

Catatan cepat:Blogger ngizinin hotlink, jadi aman dipake langsung.s200 di link itu artinya lebar 200px. Kalau mau lebih besar ganti jadi s400, s600, dst. Atau hapus aja /s200/ biar ukuran asli.Hapus <div> dan <a> pembungkusnya. Cukup tag <img> doang biar nggak aneh di dalam kartu soal.Mau aku rapihin kode lengkapnya biar gambar blogger ini langsung masuk ke versi kuis auto-cek yang tadi?


About

Cookies Consent

This website uses cookies to offer you a better Browsing Experience. By using our website, You agree to the use of Cookies

Learn More