Toggle menu
876
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
New page: ==Challenge== In order to let the respondent prioritize a list of products<br/> As a questionnaire creator<br/> I want to allow him to enter only values in a list of priorities for each pr...
 
Nguyentrantri (talk | contribs)
No edit summary
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
==Challenge==
== Challenge ==
In order to let the respondent prioritize a list of products<br/>
 
As a questionnaire creator<br/>
In order to let the respondent prioritize a list of products
I want to allow him to enter only values in a list of priorities for each product (one priority is only used once)<br/>
 
'''Example'''<br/>
As a questionnaire creator
[[Image:Prioritize_products.png]]
 
==Code==
I want to allow him to enter only values in a list of priorities for each product (one priority is only used once)
<source lang=javascript>
 
'''Example'''<br/>[[File:PrioritizeSQInTextGrid.jpg]]
 
== Solution ==
 
*Add a Text grid question to Questionnaire editor like below
*Go to menu Properties -> Question scripts -> Java script tab -> Input script
 
[[File:PrioritizeSQInTextGrid Code.jpg]]
 
== 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 23: 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 ==
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