2015-01-20 5 views
0

저는 JavaScript를 매우 새로 도입했습니다. Qualtrics 설문 조사를 통해 응답자가 먼저 스페이스 바를 눌러야하는 질문을 작성한 다음 화면의 수학 문제에 응답하려고합니다. 내가 원하는 것은 Qualtrics가 스페이스 바를 누르거나 ("X"로 점수를 매기는지), 아니면 (2) 그들이한다면 스페이스 바를 누르기까지 얼마나 걸렸는지를 기록하는 것입니다. (3) 키 누르기에서 다음 화면으로 넘어 가지 않기. 화면에서 수학 문제에 답해야하기 때문에. 여기에 내가 노력했습니다 무엇 다음 퀼트 릭스 질문 Q1의전진없이 키 누르기 및 응답 시간 기록

본체 : 퀼트 릭스 질문 Q1과 관련된

Please press the spacebar, then solve this problem: 1+12+15-13-3+19-9=? 

자바 스크립트 :

Qualtrics.SurveyEngine.addOnload(function() 
{ 
    var day = new Date(); 
    trialstart = day.getTime(); 

    $(document).on('keydown', function(e) { 
     if(e.keyCode === 32) { 
      var day = new Date(); 
      trialend = day.getTime(); 
      rt = trialend - trialstart; 
      document.getElementById("Q1").value = document.getElementById("Q1").value + "C" + rt + ","; 
     } 
     else{ 
      document.getElementById("Q1").value = document.getElementById("Q1").value + "X" + ","; 
     } 
    }); 
}); 

지금,이 스크립트는 아무것도하지 않습니다 ; Qualtrics는 Q1과 관련된 응답 텍스트 상자에 입력 된 내용 (결과 문제)을 출력하지만 스페이스 바를 눌렀는지 또는 해당 키를 누를 때 응답 시간을 기록하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다. 감사.

답변

0

"Q1"을 ID로 사용하고 있으므로 출력이 표시되지 않을 수 있습니다. Qualtrics 요소 ID는 실제로는 약간 다르므로이를 찾는 가장 좋은 방법은 설문 조사를 미리보고 브라우저를 사용하여 적절한 ID를 찾는 것입니다.

이제 전체 답변을 보려면 Javascript에서 키 누르기 이벤트를 바인딩 해제 할 수있는 방법이 없습니다. 따라서 텍스트 입력을 끝내지 않는 한 항상 C가 아닌 X로 끝납니다. 대신 다음과 같이 시도하십시오 :

Qualtrics.SurveyEngine.addOnload(function(){ 
    var pageStart = new Date(); 
    var trialstart = pageStart.getTime(); 
    var that = this; 
    that.hideNextButton(); 
    var para = document.createElement("footnote"); 
    var test = document.getElementById("Buttons"); 
    var node = document.createElement('input'); 
    var next = document.getElementById("NextButton"); 
    var rt; 
    node.id = "newButton"; 
    node.type = "button"; 
    node.name = "newButton"; 
    node.value = " Continue "; 
    var fired = 0; 
    var spaceFirst = ''; 

    $(document).on('keydown', function(e) { 
     if(fired != 1){ 
      if(e.keyCode === 32) { 
       var day = new Date(); 
       var trialend = day.getTime(); 
       rt = trialend - trialstart; 
       spaceFirst = 'C'; 
       fired = 1; 
      } 
      else{ 
       spaceFirst = 'X'; 
       fired = 1; 
      } 
     }else{} 
    }); 

    node.onclick = function stuff(){ 
     if(spaceFirst == 'C'){ 
      document.getElementById("QR~QID1").value = document.getElementById("QR~QID1").value + ', ' + spaceFirst + ", " + rt; 
     }else if(spaceFirst == 'X'){ 
      document.getElementById("QR~QID1").value = document.getElementById("QR~QID1").value + ', ' + spaceFirst; 
     }else{} 
     window.alert(document.getElementById("QR~QID1").value); 
     that.clickNextButton(); 
    }; 
    para.appendChild(node); 
    test.insertBefore(para, next); 

}); 

이 기능은보기에서 다음 버튼을 숨기고 그 위치에 새로운 버튼을 만듭니다. (현재 버튼과 일치 시키려면이 버튼의 스타일을 지정해야합니다 (id = "newButton"). 그런 다음 첫 번째 keydown 이벤트를 청취합니다. 공백이면 변수를 C와 같게 설정하고, 그렇지 않으면 X와 동일하게 설정합니다. 그런 다음 keydown 수신기를 비활성화하여 모든 키 누르기 후에 실행되지 않도록합니다.

새 단추를 누르면 적절한 X 또는 C와 페이지 시간이 추가됩니다. 테스트/디버깅 용도로만 사용되므로 경고를 제거하거나 주석으로 처리 할 수 ​​있습니다.

+0

환상적입니다. 완벽하게 작동합니다! 코드와 조언 모두에 감사드립니다. – abclist19

+0

전혀 문제가되지 않습니다! 내 첫 번째 답변에 감사드립니다! –