diff --git a/index.html b/index.html index 22722ea..abd2571 100644 --- a/index.html +++ b/index.html @@ -956,13 +956,14 @@ function examCli(j){ if(kor)examScore++;examIdx++;setTimeout(showExamQ,400); } function examCfil(){ - let q=Q.find(x=>x.id===examQid[examIdx]);if(!q)return; - let v=$('eip')?$('eip').value.trim():'';if(!v)return; - let kor=v===q.ans; - let inp=$('eip');inp.disabled=true;inp.className='inp '+(kor?'ok':'no'); + let q=Q.find(function(x){return x.id===examQid[examIdx];});if(!q)return; + let v=$(('eip'))?$(('eip')).value.trim():'';if(!v)return; + function n(s){return s.replace(/[\s,,、;;。..]+/g,",").replace(/^,+|,+$/g,"").replace(/,+/g,",").replace(/\s+/g,"").toLowerCase();} + var kor=n(v)===n(q.ans); + if(!kor){var nv=parseFloat(v);var na=parseFloat(q.ans);if(!isNaN(nv)&&!isNaN(na)&&Math.abs(nv-na)<0.001)kor=true;} + var inp=$(('eip'));inp.disabled=true;inp.className='inp '+(kor?'ok':'no'); if(kor)examScore++;examIdx++;setTimeout(showExamQ,600); -} -function finishExam(){ +}function finishExam(){ if(examTimer){clearInterval(examTimer);examTimer=null;} $('eh').className='exam-hdr'; let pct=examQid.length?Math.round(examScore/examQid.length*100):0; @@ -1103,42 +1104,68 @@ function showFullExp(id){ cd.appendChild(fb);upd(); } function cfil(id){ - let q=Q.find(x=>x.id===id);if(!q)return; + let q=Q.find(function(x){return x.id===id;});if(!q)return; let v=$('ip'+id)?$('ip'+id).value.trim():'';if(!v)return; - let kor=(v===q.ans); + // Normalize both input and answer for flexible comparison + function normalize(s){ + return s.replace(/[\s,,、;;。..]+/g,",").replace(/^,+|,+$/g,"").replace(/,+/g,",").replace(/\s+/g,"").toLowerCase(); + } + let userNorm=normalize(v); + let ansNorm=normalize(q.ans); + // Support partial match for comma-separated answers + let kor=(userNorm===ansNorm); + if(!kor&&ansNorm.indexOf(",")>0){ + let userParts=userNorm.split(",").filter(function(p){return p.length>0;}); + let ansParts=ansNorm.split(",").filter(function(p){return p.length>0;}); + if(userParts.length===ansParts.length){ + var allMatch=true; + for(var pi=0;pi🔄 再试一次👀 看解析'; - cd.appendChild(ht);return; - } - } + // Always show explanation immediately (remove hint-first flow) + let cd=inp.closest('.cd'); + let existingFB=cd?cd.querySelector('.fb'):null; + if(existingFB)existingFB.remove(); let fb=document.createElement('div'); fb.className='fb sh '+(kor?'go':'bd'); - fb.innerHTML=(kor?'✅ PERFECT! 完美通过!':'❌ MISS! 再练练!')+'
🔧 维修站解析:'+q.exp; - if(!kor)fb.innerHTML+='
正确赛道路线:'+q.ans; - inp.parentElement.appendChild(fb); - if(!kor){ - let sims=getSimQuestions(q,3); + if(kor){ + fb.innerHTML='✅ PERFECT! 完美通过!
🔧 维修站解析:'+q.exp; + }else{ + fb.innerHTML='❌ MISS! 再练练!
🔧 维修站解析:'+q.exp+'
✅ 正确答案:'+q.ans; + if(v!==q.ans)fb.innerHTML+='
你的答案: '+v+''; + // Show similar questions for practice + let sims=getSimQuestions(q,2); if(sims.length){ - let cd=inp.closest('.cd');let sdiv=document.createElement('div');sdiv.className='sim sh'; + let sdiv=document.createElement('div');sdiv.className='sim sh'; let shtml='🏎 关联练习(同题型巩固)'; - sims.forEach((sq,si)=>{ + sims.forEach(function(sq,si){ shtml+='
'+(si+1)+'. '+sq.stem.replace(/\n/g,'
')+'
'; - if(sq.type==='choice'){shtml+='
';sq.opts.forEach((o,j)=>{let c='op';shtml+='';});shtml+='
';} - else{shtml+='
';} + if(sq.type==='choice'){ + shtml+='
'; + sq.opts.forEach(function(o,j2){shtml+='';}); + shtml+='
'; + }else{ + shtml+='
'; + } }); sdiv.innerHTML=shtml;cd.appendChild(sdiv); } } + if(cd)cd.appendChild(fb); upd(); -} -function retryFill(id){ +}function retryFill(id){ delete conv[id];let el=document.querySelector('.cd:has(.ht)'); if(el){let q=Q.find(x=>x.id===id);if(q)el.outerHTML=renderCard(q,0,true);} upd();