Toggle menu
862
3.8K
30.2K
279.1K
Catglobe Wiki
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Prioritize sub questions in a text grid question: Difference between revisions

From Catglobe Wiki
Cg van (talk | contribs)
No edit summary
Nguyentrantri (talk | contribs)
No edit summary
 
Line 1: Line 1:
==Challenge==
== Challenge ==
 
In order to let the respondent prioritize a list of products
In order to let the respondent prioritize a list of products


Line 6: Line 7:
I want to allow him to enter only values in a list of priorities for each product (one priority is only used once)
I want to allow him to enter only values in a list of priorities for each product (one priority is only used once)


'''Example'''
'''Example'''<br/>[[File:PrioritizeSQInTextGrid.jpg]]
<br/>
 
[[Image:PrioritizeSQInTextGrid.jpg]]
== Solution ==
==Solution==
 
*Add a Text grid question to Questionnaire editor like below
*Add a Text grid question to Questionnaire editor like below
*Go to menu Properties -> Question scripts -> Java script tab -> Input script  
*Go to menu Properties -> Question scripts -> Java script tab -> Input script
[[Image:PrioritizeSQInTextGrid Code.jpg]]
 
==Code==
[[File:PrioritizeSQInTextGrid Code.jpg]]
<source lang=javascript>
 
== Code ==
 
<source lang="javascript">
function isNumeric_LessThan6(sText)
function isNumeric_LessThan6(sText)
{
{
var ValidChars = "12345";
var ValidChars = "12345";
if (sText.length != 1)
if (sText.length != 1)
return false;
return false;
if (ValidChars.indexOf(sText) == -1)  
if (ValidChars.indexOf(sText) == -1)  
return false;  
return false;  
return true;
return true;
}
}


Line 31: Line 35:
function extendedQuestionCheck()
function extendedQuestionCheck()
{
{
var valid = normalQuestionCheck();
var valid = normalQuestionCheck();
if (!valid)
if (!valid)
return false;
return false;
var usedNumbers = "";
var usedNumbers = "";
ErrorMessages.getInstance().clearErrorMessages();
ErrorMessages.getInstance().clearErrorMessages();
var msg = "";
var msg = "";
$("input:text").each(
$("input:text").each(
function(i)
function(i)
{
{
if ($(this).attr("name").indexOf("QUESTION.") == 0)
if ($(this).attr("name").indexOf("QUESTION.") == 0)
{
{
//check the value
//check the value
var v = $(this).val();
var v = $(this).val();
if (!isNumeric_LessThan6(v))
if (!isNumeric_LessThan6(v))
{
{
msg = "Only 1-5 are allowed as input";
msg = "Only 1-5 are allowed as input";
valid = false;
valid = false;
return;
return;
}
}
if (usedNumbers.indexOf(v) != -1)
if (usedNumbers.indexOf(v) != -1)
{
{
valid = false;
valid = false;
msg = "One value can only be specified for one row";
msg = "One value can only be specified for one row";
return;
return;
}
}  
usedNumbers = usedNumbers + v;
usedNumbers = usedNumbers + v;
}
}
}
}
);
);
if (!valid)
if (!valid)
ErrorMessages.getInstance().showErrorMessage(msg);  
ErrorMessages.getInstance().showErrorMessage(msg);  
return valid;
return valid;
}
}


questioncheck = extendedQuestionCheck;
questioncheck = extendedQuestionCheck;
</source>
</source>
==Source==
 
== Source ==
 
Questionnaire Resource Id on cg site: 159730
Questionnaire Resource Id on cg site: 159730

Latest revision as of 03:17, 17 October 2013

Challenge

In order to let the respondent prioritize a list of products

As a questionnaire creator

I want to allow him to enter only values in a list of priorities for each product (one priority is only used once)

Example

Solution

  • Add a Text grid question to Questionnaire editor like below
  • Go to menu Properties -> Question scripts -> Java script tab -> Input script

Code

function isNumeric_LessThan6(sText)
{
 var ValidChars = "12345";
 if (sText.length != 1)
 return false;
 
 if (ValidChars.indexOf(sText) == -1) 
 return false; 
 
 return true;
}

var normalQuestionCheck = questioncheck;

function extendedQuestionCheck()
{
 var valid = normalQuestionCheck();
 if (!valid)
 return false;
 
 var usedNumbers = "";
 ErrorMessages.getInstance().clearErrorMessages();
 var msg = "";
 
 $("input:text").each(
 function(i)
 {
 if ($(this).attr("name").indexOf("QUESTION.") == 0)
 {
 //check the value
 var v = $(this).val();
 if (!isNumeric_LessThan6(v))
 {
 msg = "Only 1-5 are allowed as input";
 valid = false;
 return;
 }
 
 if (usedNumbers.indexOf(v) != -1)
 {
 valid = false;
 msg = "One value can only be specified for one row";
 return;
 } 
 
 usedNumbers = usedNumbers + v;
 }
 }
 );
 if (!valid)
 ErrorMessages.getInstance().showErrorMessage(msg); 
 
 return valid;
}

questioncheck = extendedQuestionCheck;

Source

Questionnaire Resource Id on cg site: 159730