Toggle menu
875
3.8K
30.2K
279.1K
Catglobe Wiki
Toggle preferences menu
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