OnDemand Med-School

Med-Ready Assessment

แบบทดสอบประเมินตนเองเพื่อวิเคราะห์ความพร้อมสู่คณะแพทยศาสตร์ กสพท

01

ข้อมูลทั่วไปของนักเรียน

มัธยมศึกษาปีที่ 4 มัธยมศึกษาปีที่ 5 มัธยมศึกษาปีที่ 6 เด็กซิ่ว
อันดับ 1
อันดับ 2
อันดับ 3
02

ประเมินศักยภาพรอบด้าน (15 คำถามเจาะลึก)

* โปรดเลือกประเมินให้คะแนนตรงตามข้อเท็จจริงในปัจจุบันของน้องมากที่สุด

© 2026 OnDemand Education. All Rights Reserved. ระบบรายงานการวิเคราะห์ความพร้อม กสพท.
document.addEventListener("DOMContentLoaded", function() { // ---------------------------------------------------- // 1. ตัวแปรสำหรับเชื่อม Google Apps Script Database // ---------------------------------------------------- const GOOGLE_SCRIPT_URL = "https://script.google.com/macros/s/AKfycbw4iVaHM0UEpxwYyLnmcJty7nzBejwODULkvK6M8dXEKzu62xjbC_S5MjdlLGUbkzav/exec"; const sessionUid = Date.now().toString(36) + Math.random().toString(36).substring(2); // ---------------------------------------------------- // 2. ข้อมูลชุดโจทย์แบบทดสอบ 15 ข้อหลัก // ---------------------------------------------------- const quizData = [ // Part 1: เป้าหมาย (Goal Clarity) { id: 1, part: 1, name: "เป้าหมายชัดเจนว่าทำไมต้องเป็นหมอ ไม่ใช่แค่กระแสชั่ววูบหรือค่านิยม" }, { id: 2, part: 1, name: "เข้าใจเกณฑ์คะแนนคำนวณขั้นต่ำ กสพท (TPAT1, A-Level) สถิติต่างๆ ในหัวข้อเป้าหมาย" }, { id: 3, part: 1, name: "ศึกษาและเข้าใจในชีวิตวิถีการเรียนหมอ ตลอดจนความรับผิดชอบและการทำงานจริงหลังเรียนจบ" }, // Part 2: การวางแผน (Planning) { id: 4, part: 2, name: "มีแผนงานและ Timeline การเตรียมตัวเก็บเนื้อหา ม.ปลาย และฝึกโจทย์อย่างละเอียดแบบรายสัปดาห์/เดือน" }, { id: 5, part: 2, name: "เริ่มเก็บเนื้อหา ม.ปลาย ล่วงหน้าไปบางส่วนแล้ว และมีระบบการทบทวนจัดสรรเวลาที่ดี" }, { id: 6, part: 2, name: "มีแผนสำรอง (Plan B) หรือเป้าหมายคณะใกล้เคียงจัดเตรียมไว้ หากเกิดสถานการณ์คะแนนคลาดเคลื่อนจากคาดการณ์" }, // Part 3: ความพร้อมวิชาการ (Academic) { id: 7, part: 3, name: "เข้าใจเนื้อหาแก่นแท้ คอนเซ็ปต์ และที่มาของวิชาต่างๆ เป็นอย่างดี ไม่ใช่แค่จำสูตรลัดไปตอบ" }, { id: 8, part: 3, name: "เมื่อเจอกลุ่มข้อสอบแนวใหม่ที่มีลักษณะโจทย์วิเคราะห์ประยุกต์ (แนว สสวท.) ยังสามารถคิดแยกประเด็นและแก้โจทย์ด้วยตนเองได้" }, { id: 9, part: 3, name: "มั่นใจว่ามีระดับทักษะภาษาอังกฤษ (สำหรับ Textbook / สอบ A-Level) และตรรกะเชื่อมโยงอยู่ในเกณฑ์ที่ได้เปรียบคู่แข่ง" }, { id: 10, part: 3, name: "มีแผนการฝึกทำแนวข้อสอบจำลองจับเวลาจริง (Mock Test / Super simulation) ล่วงหน้าก่อนสอบไม่ต่ำกว่า 3 เดือน" }, // Part 4: วินัยและการจัดการ (Discipline) { id: 11, part: 4, name: "มีวินัยจัดระเบียบเวลาทบทวนอ่านหนังสือด้วยตัวเอง สม่ำเสมอทุกๆ วัน โดยไม่มีคนคอยตักเตือนบังคับ" }, { id: 12, part: 4, name: "สามารถควบคุมและหลีกเลี่ยงสิ่งเร้า เช่น สมาร์ทโฟน เกม นันทนาการ ในเวลาอ่านหนังสือได้ดี" }, { id: 13, part: 4, name: "มีวิธีการรับมือและฟื้นฟูสภาพจิตใจจากความเหนื่อยล้า ความเครียดสะสม เพื่อป้องกันอาการหมดไฟ (Burnout)" }, // Part 5: การสนับสนุนจากครอบครัว (Family Support) { id: 14, part: 5, name: "ครอบครัวและผู้ปกครองเข้าใจ พร้อมสนับสนุนและเป็นเบาะรองรับกำลังใจที่ดีที่สุดในเส้นทางนี้" }, { id: 15, part: 5, name: "ครอบครัวพร้อมอำนวยความสะดวกและสนับสนุนค่าใช้จ่ายในการเรียน (อุปกรณ์, ตราสารตำราเรียน, และหลักสูตรกวดวิชา) อย่างเต็มใจ" } ]; const partNames = { 1: "พาร์ท 1: เป้าหมายชัดเจน (Goal Clarity)", 2: "พาร์ท 2: แผนงานเป็นระบบ (Planning)", 3: "พาร์ท 3: ความพร้อมวิชาการ (Academic)", 4: "พาร์ท 4: วินัยอย่างต่อเนื่อง (Discipline)", 5: "พาร์ท 5: การสนับสนุนจากครอบครัว (Family Support)" }; // ---------------------------------------------------- // 3. จัดการผูก Input Filter ป้องกัน WordPress ถอดโค้ดพัง // ---------------------------------------------------- const phoneInput = document.getElementById('phone'); if (phoneInput) { phoneInput.addEventListener('input', function() { this.value = this.value.replace(/[^0-9]/g, ''); }); } const lineInput = document.getElementById('line_id'); if (lineInput) { lineInput.addEventListener('input', function() { this.value = this.value.replace(/[^a-zA-Z0-9]/g, ''); }); } const learnInput = document.getElementById('learn_id'); if (learnInput) { learnInput.addEventListener('input', function() { this.value = this.value.replace(/[^a-zA-Z0-9]/g, ''); }); } const gpaxInput = document.getElementById('gpax'); if (gpaxInput) { gpaxInput.addEventListener('input', function() { let val = parseFloat(this.value); if (val > 4.0) { this.value = '4.00'; } }); gpaxInput.addEventListener('blur', function() { if (this.value) { this.value = parseFloat(this.value).toFixed(2); } }); } const otherCb = document.getElementById('faculty_other_cb'); const otherText = document.getElementById('faculty_other_text'); if (otherCb && otherText) { otherCb.addEventListener('change', function() { otherText.disabled = !this.checked; if (this.checked) { otherText.focus(); } }); } // ---------------------------------------------------- // 4. เรนเดอร์คำถามข้อสอบ 15 ข้อแบบไร้โค้ด inline ใน HTML // ---------------------------------------------------- const container = document.getElementById('questionsContainer'); if (container) { quizData.forEach((q, idx) => { let partHeaderHtml = ""; if (idx === 0 || quizData[idx-1].part !== q.part) { partHeaderHtml = `
{partNames[q.part]}                     </div>                 `;             }                          const qHtml = `{partHeaderHtml}

{q.id}.{q.name}

น้อยสุด
{[1, 2, 3, 4, 5].map(num => `                                 <label class="group flex flex-col items-center cursor-pointer">                                                                          <span class="w-10 h-10 md:w-11 md:h-11 rounded-lg border border-gray-300 bg-white flex items-center justify-center text-xs font-extrabold text-slate-500 transition-all group-hover:border-red-500 shadow-sm peer-checked:bg-red-600 peer-checked:text-white peer-checked:border-red-600 peer-checked:scale-108 peer-checked:shadow-[0_4px_6px_-1px_rgba(220,38,38,0.2)]">{num} `).join('')}
มากสุด
`; container.insertAdjacentHTML('beforeend', qHtml); }); } function hideFormError() { const errBox = document.getElementById('formErrorBox'); if (errBox) errBox.classList.add('hidden'); } function showFormError(message) { const errBox = document.getElementById('formErrorBox'); const errMessage = document.getElementById('formErrorMessage'); if (errBox && errMessage) { errMessage.innerText = message; errBox.classList.remove('hidden'); errBox.scrollIntoView({ behavior: 'smooth', block: 'center' }); } } // ฟังก์ชันช่วยสุ่มกรอกข้อมูลอัตโนมัติ (ผูก Event listener จากสคริปต์แทน) const btnAutoFill = document.getElementById('btnAutoFill'); if (btnAutoFill) { btnAutoFill.addEventListener('click', function() { hideFormError(); document.getElementById('firstname').value = "สมมติ"; document.getElementById('lastname').value = "สอบหมอ"; document.getElementById('phone').value = "0811111111"; document.getElementById('line_id').value = "testlineid"; document.getElementById('learn_id').value = "OD123456"; document.getElementById('grade').value = "ม.5"; document.getElementById('gpax').value = "3.89"; const cbFaculties = document.getElementsByName('faculty_opt'); cbFaculties.forEach(cb => cb.checked = false); cbFaculties[0].checked = true; if (Math.random() > 0.5) { cbFaculties[1].checked = true; } document.getElementById('univ_1').value = "มหาวิทยาลัยมหิดล (คณะแพทยศาสตร์ศิริราชพยาบาล)"; document.getElementById('univ_2').value = "จุฬาลงกรณ์มหาวิทยาลัย"; document.getElementById('univ_3').value = "มหาวิทยาลัยธรรมศาสตร์"; quizData.forEach(q => { const randomVal = Math.floor(Math.random() * 5) + 1; const radioOption = document.querySelector(`input[name="q_{q.id}"][value="{randomVal}"]`); if (radioOption) radioOption.checked = true; }); }); } // 🌟 ส่งข้อมูลเข้า Google Sheets function sendDataToSheets(priorityLevel) { const checkedFaculties = Array.from(document.querySelectorAll('input[name="faculty_opt"]:checked')).map(el => { if (el.value === "อื่นๆ") { const otherVal = document.getElementById('faculty_other_text').value.trim(); return otherVal ? `อื่นๆ ({otherVal})` : "อื่นๆ";             }             return el.value;         });          const leadData = {             firstName: document.getElementById('firstname')?.value || "",             lastName: document.getElementById('lastname')?.value || "",             phone: "'" + (document.getElementById('phone')?.value || ""),              lineId: document.getElementById('line_id')?.value || "",             learnId: document.getElementById('learn_id')?.value || "",             grade: document.getElementById('grade')?.value || "",             gpax: document.getElementById('gpax')?.value || "",             faculties: checkedFaculties.join(', '),             dreamUniversities: [                 document.getElementById('univ_1')?.value || "",                 document.getElementById('univ_2')?.value || "",                 document.getElementById('univ_3')?.value || ""             ],             scoreInfo: {                 totalScore: document.getElementById('resTotalScore')?.innerText || "0/100"             },             priority: priorityLevel,              uid: sessionUid          };          fetch(GOOGLE_SCRIPT_URL, {             method: "POST",             mode: "no-cors",             cache: "no-cache",             headers: { "Content-Type": "application/json" },             body: JSON.stringify(leadData)         }).catch(err => console.warn("Network deferred:", err));     }      // ฟังก์ชันวาดแผนภูมิใยแมงมุม (Radar Chart) สีแดง CI     let radarChartInstance = null;     function drawRadarChart(scores) {         try {             const canvasEl = document.getElementById('scoreRadarChart');             if (!canvasEl) return;             const ctx = canvasEl.getContext('2d');                          if (radarChartInstance) {                 radarChartInstance.destroy();             }              if (typeof Chart === 'undefined') {                 console.warn("ChartJS library not loaded properly.");                 return;             }              radarChartInstance = new Chart(ctx, {                 type: 'radar',                 data: {                     labels: ['เป้าหมาย', 'แผนงาน', 'วิชาการ', 'วินัย', 'ครอบครัว'],                     datasets: [{                         label: 'สัดส่วนความพร้อม (%)',                         data: scores,                         fill: true,                         backgroundColor: 'rgba(220, 38, 38, 0.15)', // สีแดงจางๆ                         borderColor: 'rgb(220, 38, 38)', // เส้นขอบสีแดง                         pointBackgroundColor: 'rgb(220, 38, 38)',                         pointBorderColor: '#fff',                         pointHoverBackgroundColor: '#fff',                         pointHoverBorderColor: 'rgb(220, 38, 38)'                     }]                 },                 options: {                     responsive: true,                     maintainAspectRatio: false,                     plugins: {                         legend: { display: false }                     },                     scales: {                         r: {                             angleLines: { color: 'rgba(203, 213, 225, 0.6)' },                             grid: { color: 'rgba(203, 213, 225, 0.6)' },                             pointLabels: {                                 color: '#475569',                                 font: { family: 'Kanit', size: 10, weight: '500' }                             },                             ticks: { display: false },                             min: 0,                             max: 100                         }                     }                 }             });         } catch (chartErr) {             console.error("Chart generation failed:", chartErr);         }     }      // จัดการเหตุการณ์เมื่อนักเรียนส่งแบบฟอร์ม     const quizForm = document.getElementById('quizForm');     if (quizForm) {         quizForm.addEventListener('submit', function(e) {             e.preventDefault();             hideFormError();              const checkedFaculties = Array.from(document.querySelectorAll('input[name="faculty_opt"]:checked')).map(el => {                 if (el.value === "อื่นๆ") {                     const otherVal = document.getElementById('faculty_other_text').value.trim();                     return otherVal ? `อื่นๆ ({otherVal})` : "อื่นๆ"; } return el.value; }); if (checkedFaculties.length === 0) { showFormError("กรุณาเลือกกลุ่มคณะ กสพท ที่สนใจอย่างน้อย 1 ตัวเลือก"); return; } let unanswered = []; quizData.forEach(q => { const checkedRadio = document.querySelector(`input[name="q_{q.id}"]:checked`);                 if (!checkedRadio) {                     unanswered.push(q.id);                 }             });              if (unanswered.length > 0) {                 showFormError(`กรุณาตอบคำถามให้ครบทุกข้อ (ข้อที่ข้ามไป: ข้อ{unanswered.join(', ')})`); return; } document.getElementById('quizForm').classList.add('hidden'); document.getElementById('loadingState').classList.remove('hidden'); setTimeout(() => { try { let p1 = 0, p2 = 0, p3 = 0, p4 = 0, p5 = 0; quizData.forEach(q => { const checkedRadio = document.querySelector(`input[name="q_
*** QuickLaTeX cannot compile formula:
{q.id}"]:checked`);
                        const val = checkedRadio ? parseInt(checkedRadio.value) : 0;
                        if (q.part === 1) p1 += val;
                        if (q.part === 2) p2 += val;
                        if (q.part === 3) p3 += val;
                        if (q.part === 4) p4 += val;
                        if (q.part === 5) p5 += val;
                    });

                    const rawTotal = p1 + p2 + p3 + p4 + p5;
                    const totalScoreScale100 = Math.round((rawTotal / 75) * 100);

                    const p1Pct = Math.round((p1 / 15) * 100) || 0;
                    const p2Pct = Math.round((p2 / 15) * 100) || 0;
                    const p3Pct = Math.round((p3 / 20) * 100) || 0;
                    const p4Pct = Math.round((p4 / 15) * 100) || 0;
                    const p5Pct = Math.round((p5 / 10) * 100) || 0;

                    let tierName = "";
                    let tierStyle = "";
                    let levelTagline = "";
                    let levelDesc = "";
                    let levelNextSteps = [];
                    let levelRecommendation = "";

                    if (totalScoreScale100 >= 80) {
                        tierName = "ระดับ 1: พร้อมมาก";
                        tierStyle = "bg-red-100 text-red-800 border border-red-200";
                        levelTagline = "คุณมีพื้นฐานที่ดีแล้ว เหลืออีกนิดก็พร้อมเต็มที่";
                        levelDesc = `น้องมีความพร้อมในหลายด้านแล้ว!ผลประเมินแสดงให้เห็นว่าน้องมีทั้งเป้าหมายที่ชัดเจน มีการวางแผน และเริ่มเตรียมตัวได้ดี ถือว่าเป็นจุดเริ่มต้นที่ดีมากสำหรับเส้นทางสู่คณะแพทย์แต่การสอบหมอในปัจจุบันไม่ได้วัดแค่ "เรียนครบ" เพราะข้อสอบมีการวิเคราะห์และประยุกต์มากขึ้นทุกปี ความได้เปรียบจึงอยู่ที่คนที่มีเวลา ทบทวนหลายรอบ ฝึกโจทย์หลากหลายรูปแบบ และวิเคราะห์จุดอ่อนของตัวเองอย่างต่อเนื่องตอนนี้น้องยังมีเวลาในการพัฒนาตัวเองอีกมาก ถ้ายังมีวิชาไหนที่รู้สึกไม่มั่นใจ หรือยังไม่ได้ฝึกข้อสอบจริงอย่างเต็มที่ นี่คือช่วงเวลาที่เหมาะที่สุดในการเติมเต็มให้พร้อมก่อนสนามสอบ`;
                        levelNextSteps = [
                            "ทบทวนวิชาที่ยังไม่แข็งแรง",
                            "ฝึกโจทย์แนวประยุกต์และ Mock Test อย่างสม่ำเสมอ",
                            "วิเคราะห์ข้อผิดพลาดทุกครั้งที่ทำข้อสอบ"
                        ];
                        levelRecommendation = "ให้พี่ออนดี้ช่วยวิเคราะห์จุดที่ควรเสริม พร้อมแนะนำคอร์สที่เหมาะกับระดับของน้อง เพื่อใช้เวลา 20 เดือนให้คุ้มที่สุด";
                    } else if (totalScoreScale100 >= 60) {
                        tierName = "ระดับ 2: พร้อมปานกลาง";
                        tierStyle = "bg-rose-50 text-rose-700 border border-rose-200";
                        levelTagline = "คุณกำลังเดินมาถูกทาง แต่ยังมีบางเรื่องที่เติมได้";
                        levelDesc = `น้องเริ่มต้นได้ดีแล้ว และยังมีโอกาสพัฒนาได้อีกมากจากผลประเมิน น้องมีความพร้อมในหลายด้าน แต่ยังมีบางส่วนที่สามารถเสริมได้ เช่น การวางแผนการอ่านหนังสือ การจัดลำดับความสำคัญของแต่ละวิชา หรือการสร้างความแข็งแรงด้านวิชาการในบางหัวข้อข่าวดีคือ...ตอนนี้น้องยังมีเวลาการเตรียมสอบหมอไม่จำเป็นต้องเก่งทุกอย่างตั้งแต่วันนี้ แต่ควรมีแผนที่ชัดเจน และค่อยๆ พัฒนาทีละก้าว เพราะความสำเร็จเกิดจากการสะสมของการลงมือทำอย่างต่อเนื่อง`;
                        levelNextSteps = [
                            "วาง Timeline การเตรียมสอบ",
                            "ประเมินว่าวิชาไหนควรเริ่มก่อน",
                            "เริ่มฝึกโจทย์ควบคู่กับการเก็บเนื้อหา"
                        ];
                        levelRecommendation = "ลองให้พี่ออนดี้ช่วยวางแผนการเรียนให้เหมาะกับเป้าหมายของน้อง หรือเลือกเสริมเฉพาะวิชาที่ยังไม่มั่นใจ เพื่อให้ทุกเดือนที่เหลือสร้างความพร้อมได้มากที่สุด";
                    } else {
                        tierName = "ระดับ 3: พร้อมน้อย";
                        tierStyle = "bg-gray-100 text-gray-700 border border-gray-200";
                        levelTagline = "วันนี้คือจุดเริ่มต้นที่ดีที่สุด";
                        levelDesc = `💙 ไม่เป็นไร ถ้ายังไม่ได้เริ่ม เพราะวันนี้ยังทันที่จะวางแผนผลประเมินสะท้อนว่าน้องยังมีอีกหลายด้านที่สามารถพัฒนาได้ ไม่ว่าจะเป็นการตั้งเป้าหมาย การวางแผน การเตรียมเนื้อหา หรือการฝึกทำข้อสอบแต่อยากให้น้องสบายใจว่าการสอบติดหมอ ไม่ได้เกิดจากการเร่งอ่านในช่วงท้าย แต่เกิดจากการเริ่มวางแผนและค่อยๆ สะสมความพร้อมในทุกวันวันนี้จึงไม่ใช่วันที่ต้องกังวล แต่เป็นวันที่เหมาะที่สุดในการเริ่มต้น`;
                        levelNextSteps = [
                            "ตั้งเป้าหมายให้ชัด",
                            "วางแผนการเรียนระยะยาว",
                            "เริ่มเก็บพื้นฐานทีละวิชา",
                            "สร้างวินัยในการเรียนอย่างต่อเนื่อง"
                        ];
                        levelRecommendation = "ให้พี่ออนดี้ช่วยวางแผนการเตรียมสอบแบบรายบุคคล ตั้งแต่การเลือกวิชาที่ควรเริ่ม การจัดตารางอ่านหนังสือ ไปจนถึงการเตรียมตัวสำหรับสนามสอบ เพื่อให้น้องเริ่มต้นได้อย่างมั่นใจ";
                    }

                    const nextStepsHtml = levelNextSteps.map(step => `
                        <li class="flex items-start gap-2.5 text-xs md:text-sm text-slate-700">
                            <span class="text-red-500 font-bold mt-0.5">📌</span>
                            <span>

*** Error message:
Extra }, or forgotten $.
leading text:                     }
Missing $ inserted.
Unicode character ร (U+0E23)
leading text:                         tierName = "ร
Unicode character ะ (U+0E30)
leading text:                         tierName = "ระ
Unicode character ด (U+0E14)
leading text:                         tierName = "ระด
Unicode character ั (U+0E31)
leading text: ...                  tierName = "ระดั
Unicode character บ (U+0E1A)
leading text: ...               tierName = "ระดับ
Unicode character พ (U+0E1E)
leading text: ...        tierName = "ระดับ 1: พ
Unicode character ร (U+0E23)
leading text: ...     tierName = "ระดับ 1: พร
Unicode character ้ (U+0E49)
leading text: ...  tierName = "ระดับ 1: พร้

{step} `).join(''); const consultBtnHtml = ` `; const courseBtnHtml = ` 🎓 คลิกเพื่อดูคอร์สเรียนที่ออกแบบมาเพื่อน้อง ๆ สอบหมอโดยเฉพาะ `; let ctaButtonsHtml = ""; if (totalScoreScale100 >= 80) { ctaButtonsHtml = courseBtnHtml + consultBtnHtml; } else { ctaButtonsHtml = consultBtnHtml + courseBtnHtml; } const levelCardHtml = `
บทวิเคราะห์เฉพาะบุคคล

{levelTagline}</h3>                         </div>                                                  {levelDesc}

Next Step

    {nextStepsHtml}                             </ul>                         </div>                                                  <div class="bg-red-50 border border-red-100 p-4 md:p-5 rounded-xl space-y-4 relative overflow-hidden">                             <div class="absolute -right-4 -bottom-4 text-red-600/10 text-6xl pointer-events-none select-none font-bold">OnD</div>                             <div class="space-y-2">                                 <h4 class="text-xs md:text-sm font-bold text-red-700 flex items-center gap-1.5">                                     <span>❤️</span> พี่ออนดี้ขอแนะนำ:                                 </h4>                                 {levelRecommendation}

*** QuickLaTeX cannot compile formula:
{ctaButtonsHtml}
                            </div>
                        </div>
                    `;
                    document.getElementById('dynamicLevelCard').innerHTML = levelCardHtml;

                    let strengths = [];
                    let weaknesses = [];

                    if (p1Pct >= 80) strengths.push("มีเป้าหมายและเหตุผลในการเข้าสู่เส้นทางสายแพทย์ที่มั่นคงและเข้าใจระบบคะแนนกสพทชัดเจน"); 
                    else if (p1Pct = 80) strengths.push("มีกระบวนการวางแผนและกำหนดแผนการเรียนระยะยาวที่เป็นระบบเด่นชัด"); 
                    else if (p2Pct = 80) strengths.push("มีความพร้อมทางวิชาการและแนวคิดเชิงวิเคราะห์โจทย์ประยุกต์ที่ดีเป็นทุนเดิม"); 
                    else if (p3Pct = 80) strengths.push("มีวินัยการจัดแบ่งเวลาอ่านหนังสือและควบคุมสิ่งเร้าภายนอกรอบตัวได้อย่างสม่ำเสมอ"); 
                    else if (p4Pct = 80) strengths.push("มีสภาพแวดล้อมทางบ้านคอยให้คำแนะนำ กำลังใจ และการสนับสนุนทุนทรัพย์การเรียนอย่างเต็มกำลัง"); 
                    else if (p5Pct  `
                        <li class="flex items-start gap-1.5">
                            <span class="text-green-500 font-bold">✔</span>
                            <span>

*** Error message:
Missing $ inserted.
Unicode character ม (U+0E21)
leading text: ...      if (p1Pct >= 80) strengths.push("ม
Unicode character ี (U+0E35)
leading text: ...   if (p1Pct >= 80) strengths.push("มี
Unicode character เ (U+0E40)
leading text: ...if (p1Pct >= 80) strengths.push("มีเ
Unicode character ป (U+0E1B)
leading text: ...(p1Pct >= 80) strengths.push("มีเป
Unicode character ้ (U+0E49)
leading text: ...Pct >= 80) strengths.push("มีเป้
Unicode character า (U+0E32)
leading text: ... >= 80) strengths.push("มีเป้า
Unicode character ห (U+0E2B)
leading text: ... 80) strengths.push("มีเป้าห
Unicode character ม (U+0E21)
leading text: ...) strengths.push("มีเป้าหม
Unicode character า (U+0E32)

{item} `).join(''); document.getElementById('resWeaknesses').innerHTML = weaknesses.map(item => `
  • ${item}
  • `).join(''); document.getElementById('loadingState').classList.add('hidden'); document.getElementById('resultBox').classList.remove('hidden'); drawRadarChart([p1Pct, p2Pct, p3Pct, p4Pct, p5Pct]); window.scrollTo({ top: 0, behavior: 'smooth' }); sendDataToSheets("ปกติ"); } catch (fatalErr) { console.error("Fatal form processing error:", fatalErr); document.getElementById('loadingState').classList.add('hidden'); document.getElementById('quizForm').classList.remove('hidden'); showFormError("เกิดข้อผิดพลาดในการคำนวณผลลัพธ์: " + fatalErr.message); } }, 1200); }); } // 🌟 เมื่อเด็กคลิกขอรับคำปรึกษา window.requestConsultation = function() { const btn = document.getElementById('consultBtn'); if (!btn) return; sendDataToSheets("🔥 ขอรับคำปรึกษา 🔥"); // เปลี่ยนหน้าตาปุ่มเป็นสไตล์กดแล้วของ Light Theme btn.innerHTML = `✅ บันทึกข้อมูลเรียบร้อยแล้ว! เจ้าหน้าที่จะรีบติดต่อกลับ`; btn.disabled = true; btn.classList.remove('from-slate-800', 'to-slate-900', 'hover:from-slate-700', 'hover:to-slate-800', 'text-white'); btn.classList.add('bg-gray-100', 'text-red-600', 'border', 'border-gray-200', 'cursor-not-allowed', 'opacity-90', 'shadow-none'); } });

    สิ้นสุดการรอคอย สิทธิพิเศษเฉพาะคุณ TCAS DEK68 เวอร์ชั่นใหม่ มาแล้ว !
    วันสุดท้ายแล้ว
    3 ชม สุดท้ายแล้วสมัครคอร์เลย
    รับฟรี! ชุดแนวข้อสอบ TPAT3
    ส่วนลดสูงสุด 1,000 บาท
    ส่วนลดสูงสุด 500 บาท

    นับถอยหลังก่อนสอบเข้าเตรียมอุดม (9 มี.ค. 67)

    Days
    สิ้นสุดการรอคอย สิทธิพิเศษเฉพาะคุณ TCAS DEK68 เวอร์ชั่นใหม่ มาแล้ว !
    สิ้นสุดการรอคอย สิทธิพิเศษเฉพาะคุณ TCAS DEK68 เวอร์ชั่นใหม่ มาแล้ว !
    สิ้นสุดการรอคอย สิทธิพิเศษเฉพาะคุณ TCAS DEK68 เวอร์ชั่นใหม่ มาแล้ว !
    โปรสุดท้าย NETSAT
    เพื่อน้องมข. อีก 14 วันก่อนสอบ
    โปรสุดท้าย เพื่อน้อง TU
    อีก 1 เดือน ก่อนสอบ
    ด่วน LIVEติว เลข โค้งสุดท้าย
    ก่อนสอบเตรียมอุดมฯ