2016-04-29 9 views
0

研究プロジェクトでは、QualtricsのJavascript機能を使用してタイマーを実装しようとしています。時間を追跡し、複数のページにわたるサブジェクトに表示します。Qualtricsでマルチページタイマーを実装する

私のコードの一般的な考え方は、複数のページにわたる時間切れのカウントダウンを追跡することです。すなわち、私は一連のタスクをそれぞれ個別のページに持っていますが、同じブロックに入れています。新しいページが読み込まれるたびにどれくらいの時間が残っているかを表示したいと思います。

これを行うには、最初にいくつかの埋め込みデータフィールド "timeleftrounded"と "start time"を定義し、後で割り当てる値を残しました。

第2に、タイマーを開始したいページの直前に次のコードを置いています。私の意図は、埋め込まれたデータ「のstart_time」を定義するために、現在の時間に読むために、このコードのために私の仕事が始まる次のページ

Qualtrics.SurveyEngine.addOnload(function() 
{ 
Event.observe($('NextButton'), 'click', function (e) 
    {  
     Qualtrics.SurveyEngine.setEmbeddedData("start_time", Date.now()); 
    }); 
}); 

ある、と私は被験者が合計40分を持つようにしたいと、私は "持っています40分 "と書かれ、コードは必要ありません。しかし、その質問では、次のページをロードするボタンがクリックされたときの残りの時間(分)を計算するコードが増えています。

Qualtrics.SurveyEngine.addOnload(function() 
{ 
    Event.observe($('NextButton'), 'click', function() 
{ 
     var timeleftrounded = (2400000- (Date.now() - Number("${e://Field/start_time}")))/60000;  
    Qualtrics.SurveyEngine.setEmbeddedData("timeleftrounded",timeleftrounded); 
     }); 
    }); 

次のページでは、最初の小数点以下にこの変数を丸める「timeleftrounded」を次のコードを使用し、被験者にそれを表示し、私の混乱が始まるのはここ

$e{ round(e://Field/timeleftrounded , 1) } 

です:このコードの作品が、私は完全な調査プレビューモードを使用するか、(私がコピーを作った)調査を起動するとき、私が "ブロックを見る..."機能を使用するときに正しく、私は間違った答えを与えない限りタイマーは動作しません - 質問すると、「0」と表示されます。各ページには妥当性検査の質問があります。一度誤った答えを与えてしまえば、もう一度タイマーが動作しますが、正解のみを返すとタイマーは動作しません。

私は明らかに何かが不足していることを願っていますが、私は解決策をオンラインで見つけることができませんでしたので、これは他の人々も興味を持っているかもしれないと考えました。

答えて

1

[次へ]ボタンにイベントリスナーを追加すると、通常、[次へ]ボタンに独自のイベントリスナーがあるため、イベントリスナーを追加できません。

もっと簡単な方法を提案します。現在の調査の総所要時間が常に秒単位であるビルトイン埋め込み変数Q_TotalDurationを使用します。あなたのタイミングの質問を開始する直前に、調査の流れで

、:あなたのヘッダー内の

start_time = ${e://Field/Q_TotalDuration} 

HTML:あなた時限式の質問に

<div id="timeLeft" style="text-align:right"></div> 

のJavaScript(単に各ページに1つずつ必要):

Qualtrics.SurveyEngine.addOnload(function() 
{ 
    var timeleftrounded = (2400 - (parseInt("${e://Field/Q_TotalDuration}") - parseInt("${e://Field/start_time}")))/60; 
    timeleftrounded = timeleftrounded.toFixed(1); 
    $('timeLeft').update(timeleftrounded + " minutes left"); 
});