2014-04-23 6 views
0

저는 JavaScript에 익숙하지 않지만 약간의 수학 퀴즈를 연구 중입니다. 사용자 (1 학년 학생)가 한 번에 하나의 질문에 답한 다음 모든 사용자의 답변이 팝업에 표시되며 사용자의 대답이 올바른지 여부에 대한 피드백도 표시됩니다. 나는 그다지 잘 할 수 있지만, 내 인생에서 "입력"을 누를 때 양식 제출 방법을 결정할 수는 없습니다.JavaScript : 입력시 양식 제출

도움이 될 것입니다.

HTML :

<!DOCTYPE html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Math Worksheet</title> 
    <script src="addition.js"></script> 
    <link href='http://fonts.googleapis.com/css?family=Englebert' rel='stylesheet' type='text/css'> 
    <link href="style.css" rel="stylesheet" type="text/css"> 
</head> 

<body> 
    <form id="formSec"> 
     <table id="addProblem" width="150" border="0" cellspacing="0" cellpadding="10"> 
    <tr> 
    <td colspan="3" align="center"><h2>Problem <span id="outOf">1</span> of 12</h2></td> 
    </tr> 
    <tr> 
    <td colspan="2">&nbsp;</td> 
    <td colspan="1" align="right"><input id="carryOver"></td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td colspan="2" align="right" id="firstNum">48</td> 
    </tr> 
    <tr> 
    <td>+</td> 
    <td colspan="2" align="right" id="secondNum">16</td> 
    </tr> 
    <tr> 
    <td colspan="3"><hr id="sepLine"></td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td colspan="2" align="right"><input onKeyPress="return checkSubmit(event)" id="userAnswer" type="text"></td> 
    </tr> 
    <tr> 
     <td colspan="3"><input id="submit" type="button" onClick="submitAnswer()" value="Submit" /></td> 
    </tr> 
</table> 
    </form> 
</body> 
</html> 

자바 스크립트 :

// first number in addition problem 
var numOne = [48,39,16,43,37,23,44,13,37,28,48,16]; 

// second number in addition problem 
var numTwo = [16,22,25,18,46,49,18,39,25,17,9,28]; 

// counter variable 
var i = 0; 

// array for user answers 
var answers = []; 

// arrays to display validity 
var valid = []; 
var equality = []; 

// submit when "enter" is pressed 
function checkSubmit(e) { 
    if(e && e.keyCode == 13) 
    { 
     document.forms[0].submit(); 
    } 
} 

// check and store answer's validity 
function submitAnswer() { 
    var guessed = Number(document.getElementById('userAnswer').value); 
    var checkAnswer = 'Correct!'; 

    if (guessed != numOne[i]+numTwo[i]) { 
     checkAnswer = 'Incorrect!\nThe answer is'+' '+Number(numOne[i]+numTwo[i])+'.'; 
     valid[i] = 'Incorrect'; 
     equality[i] = ' &NotEqual; '; 
    } else if (guessed == numOne[i]+numTwo[i]) { 
     valid[i] = 'Correct'; 
     equality[i] = ' = '; 
    } 

    if(confirm(checkAnswer) && i<11) { 
     // next problem 
     i++; 
     document.getElementById('outOf').innerHTML=i+1; 
     document.getElementById('firstNum').innerHTML=numOne[i]; 
     document.getElementById('secondNum').innerHTML=numTwo[i]; 

     // saves user's answer 
     answers.push(document.getElementById('userAnswer').value); 

     // reset the answer and carry over to blank 
     document.getElementById('userAnswer').value = ''; 
     document.getElementById('carryOver').value = ''; 

     // return focus to answer box 
     document.getElementById('userAnswer').focus(); 
    } else if(i==11) { // create popup window with user's answers 
     var results=window.open('','name','height=650,width=1000'); 

     answers.push(document.getElementById('userAnswer').value); 

     results.document.write('<html><head><title>Math Worksheet Results</title>'); 
     results.document.write('<link rel="stylesheet" href="style.css">'); 
     results.document.write('<link href="http://fonts.googleapis.com/css?family=Englebert" rel="stylesheet" type="text/css">'); 
     results.document.write('</head><body><div id="resultsMain">'); 
     results.document.write('<header><h1>Student Results</h1></header><div id="results">'); 

     results.document.write('<div class="prob"><p class="probNum">1. ' + valid[0] + '</p><p class="userProb">'); 
     results.document.write(numOne[0] + ' + ' + numTwo[0] + equality[0] + answers[0] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">2. ' + valid[1] + '</p><p class="userProb">'); 
     results.document.write(numOne[1] + ' + ' + numTwo[1] + equality[1] + answers[1] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">3. ' + valid[2] + '</p><p class="userProb">'); 
     results.document.write(numOne[2] + ' + ' + numTwo[2] + equality[2] + answers[2] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">4. ' + valid[3] + '</p><p class="userProb">'); 
     results.document.write(numOne[3] + ' + ' + numTwo[3] + equality[3] + answers[3] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">5. ' + valid[4] + '</p><p class="userProb">'); 
     results.document.write(numOne[4] + ' + ' + numTwo[4] + equality[4] + answers[4] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">6. ' + valid[5] + '</p><p class="userProb">'); 
     results.document.write(numOne[5] + ' + ' + numTwo[5] + equality[5] + answers[5] + '</p></div>');   

     results.document.write('<div class="prob"><p class="probNum">7. ' + valid[6] + '</p><p class="userProb">'); 
     results.document.write(numOne[6] + ' + ' + numTwo[6] + equality[6] + answers[6] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">8. ' + valid[7] + '</p><p class="userProb">'); 
     results.document.write(numOne[7] + ' + ' + numTwo[7] + equality[7] + answers[7] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">9. ' + valid[8] + '</p><p class="userProb">'); 
     results.document.write(numOne[8] + ' + ' + numTwo[8] + equality[8] + answers[8] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">10. ' + valid[9] + '</p><p class="userProb">'); 
     results.document.write(numOne[9] + ' + ' + numTwo[9] + equality[9] + answers[9] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">11. ' + valid[10] + '</p><p class="userProb">'); 
     results.document.write(numOne[10] + ' + ' + numTwo[10] + equality[10] + answers[10] + '</p></div>'); 

     results.document.write('<div class="prob"><p class="probNum">12. ' + valid[11] + '</p><p class="userProb">'); 
     results.document.write(numOne[11] + ' + ' + numTwo[11] + equality[11] + answers[11] + '</p></div>'); 

     results.document.write('<br class="clear"></div></div></body></html>'); 
     results.document.close(); 
    } 
} 
+0

여기처럼 : 당신은 당신이 폼 태그의 onsubmit 이벤트를 추가 할 필요가 Enter 키를 누르면 submitAnswer()이 execuded되도록하려면

http://jsfiddle.net/sfarsaci/pEJxd/

를 입력 그것 '가치'와 다른 페이지에 표시되는 값을 얻을? – jhyap

+0

예. 지금 바로 "제출"을 클릭하여 다음 질문으로 이동해야합니다. 계속 전진하기 위해 입력 필드에서 "Enter"키를 누르면됩니다. – lindsey

+0

다른 페이지로 '리디렉션'해야합니까? – jhyap

답변

0

당신이 submitAnswer();document.forms[0].submit();을 대체 할 수없는 어떤 이유가 있습니까?

양식을 실제로 제출하려면 (즉, 귀하의 의도라고 생각되는 POST가 아닌) 완성도를 위해 제출 구문에 문제가있는 이유는 다음과 같습니다. submit이라는 이름의 요소는 양식의 제출 기능을 효과적으로 대체합니다.

HTMLFormElement.prototype.submit.call(document.forms[0]); 
+0

그리고 * HTMLFormElement * 또는 프로토 타입 상속을 구현하지 않는 브라우저에서? – RobG

+0

개체 프로토 타입은 모든 ECMAScript 구현의 일부로 존재했으며 HTMLFormElement는 모든 주요 브라우저에서 지원됩니다. – aarontam

+1

HTML5까지 DOM 인터페이스는 스크립팅 언어와 독립적이었고 일부 브라우저는 ECMAScript와 같은 상속을 구현했지만 일부는 그렇지 않았습니다. HTML5가 변경되었지만 모든 브라우저가 프로토 타입 상속 또는 호스트 객체 수정을 완벽하게 구현하는 것은 아닙니다. IE 7은 부분적으로 만 IE 8을 사용하지 않았습니다. 그것은 "주요 브라우저"입니까? [호스트 객체 확장하기] (http://perfectionkills.com/whats-wrong-with-extending-the-dom/)는 [내장 된 ECMAScript 객체 확장하기]와 비슷한 함정을 가지고 있습니다 (http://perfectionkills.com/extending- native-builtins /)이므로 신중하게 고려한 후에 만 ​​수행해야합니다. – RobG

1

당신이 찾고있는 하나를 누르면 형태로 입력 요소의 기본 동작입니다 : (당신이 요소의 이름을 변경하지 않으려는 경우) 대신 양식을 제출이 대안을 사용할 수 있습니다 onSubmit=submitAnswer(); 당신이 subm하려는 의미 http://jsfiddle.net/sfarsaci/H9vL4/

관련 문제