2017-05-17 14 views
0

私は、いくつかの異なるストリームの回答者にマトリックスの質問で異なる属性のサブセットを提示するQualtrics調査をプログラミングしています。Javascriptを使用してQualtricsでマスクされた選択肢をランダム化する

多くの属性と質問がありますので、回答レベルの表示ロジックをクリックして過ごす時間を避けるために、@ Tの答えを適用しました。 Gibbons(Use Javascript for Qualtrics matrix table display logic)、Javascriptを使用して下のコードでサブセットをマスクしました。

var quest = this.questionId; 
var choices = this.getChoices(); 

var survey_stream = "${e://Field/E8}"; 
var stream; 

var stream1 = ["1", "2", "3", "4", "5", "6"]; 
var stream2 = ["2", "3", "4", "7", "8", "9"]; 
var stream3 = ["1", "2", "3", "4", "5", "6"]; 

if (survey_stream=="1") {stream=stream1;} 
if (survey_stream=="2") {stream=stream2;} 
if (survey_stream=="3") {stream=stream3;} 

var idName; 
var hiddenChoices; 

hiddenChoices = choices.filter(function(x) { 
    return !stream.includes(x); 
}); 

hiddenChoices.each(function(item) { 
    idName = "header~"+quest+"~"+item; 
    $(idName).up().hide(); 
}); 

理想的には、示さ残りの項目もランダム化されるだろうが、質問のための標準的なランダム化オプションを選択すると、回答の選択肢の右の数が、間違ったサブセットを返すことによって、上記のコードを「壊します」。私の推測では、マスキングスクリプトが実行される前に選択肢の順序がランダム化されているため、ストリームの位置参照が適用される前に選択肢が順不同です。

私はこの分野のJavascriptとQualtricsのドキュメントの経験が非常に限られているので、自分の選択部分集合の適切なランダム化を含むようにコードを適合させる方法について提案はありますか?あなたのhiddenChoices.each機能については

+0

コードのために注意すべき小さなアップデートを、array.includes()は、Internet Explorerでサポートされていません/ここにあるポリフィルコードを貼り付けてください。[リンク](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/includes?v=control) – vancouverish

答えて

0

はこの試してください:あなたはコピーしない限り、マスキングが動作しませんので

hiddenChoices.each(function(item) { 
    idName = "QR~"+quest+"~"+item+"~1"; 
    $(idName).up('tr.ChoiceRow').hide(); 
}); 
+0

閉じるが、それほどではない。ランダム化を有効にしても適切なオプションが保持されますが、注文はそのままです。 – vancouverish

+0

私はあなたが何を指しているのか理解できません。私は目的が無作為化し、正しい選択肢を保持することだと思った。他には何があるの? –

+0

申し訳ありませんが、私は明確ではなかったと思います。表示する選択肢が1、2、3の場合、提案したようにコードを変更し、「すべてのオプションをランダムにする」を選択すると、選択肢は常にランダム化のないオリジナルの1,2,3の順番で表示されます。 – vancouverish

関連する問題