No edit summary |
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/> | |||
[[ | == 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 | ||
[[ | |||
==Code== | [[File:PrioritizeSQInTextGrid Code.jpg]] | ||
<source lang=javascript> | |||
== Code == | |||
<source lang="javascript"> | |||
function isNumeric_LessThan6(sText) | function isNumeric_LessThan6(sText) | ||
{ | { | ||
var ValidChars = "12345"; | |||
if (sText.length != 1) | |||
return false; | |||
if (ValidChars.indexOf(sText) == -1) | |||
return false; | |||
return true; | |||
} | } | ||
Line 31: | Line 35: | ||
function extendedQuestionCheck() | 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; | 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)
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