Hello
Please can you help with what code to use to allow a user select one option from multiple options selected in the previous question without showing the rest of the options which have not been selected.
Thank you.
Checkbox
-
- Posts: 1846
- Joined: December 5th, 2011, 11:27 pm
- Location: Washington, DC
Re: Checkbox
If you search for "ischecked" on the forum, you'll see some posts about dynamically working with checkbox selections. But even better is to look at the Simple CAPI example included with CSPro. The logic for MAIN_LANGUAGE essentially does what you are asking for:
PROC MAIN_LANGUAGE
onfocus
// set up the value set using languages that the person speaks; if only one, preselect the language
ValueSet string mainLanguageValueSet;
do numeric ctr = 1 while ctr <= MAIN_LANGUAGE_VS1.length()
if ischecked(MAIN_LANGUAGE_VS1.codes(ctr), LANGUAGES_SPOKEN) then
mainLanguageValueSet.add(MAIN_LANGUAGE_VS1.labels(ctr), MAIN_LANGUAGE_VS1.codes(ctr));
endif;
enddo;
if LANGUAGES_SPOKEN_OTHER <> "" then // add the other language
mainLanguageValueSet.add(LANGUAGES_SPOKEN_OTHER, "99");
endif;
setvalueset(MAIN_LANGUAGE, mainLanguageValueSet);
// no need to ask the question if they only listed one language for languages spoken
if mainLanguageValueSet.length() = 1 then
MAIN_LANGUAGE = mainLanguageValueSet.codes(1);
setproperty(MAIN_LANGUAGE, "Protected", "Yes");
else
setproperty(MAIN_LANGUAGE, "Protected", "No");
endif;
onfocus
// set up the value set using languages that the person speaks; if only one, preselect the language
ValueSet string mainLanguageValueSet;
do numeric ctr = 1 while ctr <= MAIN_LANGUAGE_VS1.length()
if ischecked(MAIN_LANGUAGE_VS1.codes(ctr), LANGUAGES_SPOKEN) then
mainLanguageValueSet.add(MAIN_LANGUAGE_VS1.labels(ctr), MAIN_LANGUAGE_VS1.codes(ctr));
endif;
enddo;
if LANGUAGES_SPOKEN_OTHER <> "" then // add the other language
mainLanguageValueSet.add(LANGUAGES_SPOKEN_OTHER, "99");
endif;
setvalueset(MAIN_LANGUAGE, mainLanguageValueSet);
// no need to ask the question if they only listed one language for languages spoken
if mainLanguageValueSet.length() = 1 then
MAIN_LANGUAGE = mainLanguageValueSet.codes(1);
setproperty(MAIN_LANGUAGE, "Protected", "Yes");
else
setproperty(MAIN_LANGUAGE, "Protected", "No");
endif;
Re: Checkbox
Thank you, Gregory. Looks like I didn't frame the question well.
Say if I have these value sets as a checkbox and I select Coke and Fanta as my favorite drinks.
Favorite drinks
1. Coke
2. Fanta
3. Malta
I want a situation that Coke and Fanta will be the only options that'll will show in the next question's value set. Among these I want to be able to select one.
Which of your favorite drinks do you buy the most?
1. Coke
2. Fanta
I also want to be able to loop through all the occurrences and perform the same function for each occurrence.
Thanks
Say if I have these value sets as a checkbox and I select Coke and Fanta as my favorite drinks.
Favorite drinks
1. Coke
2. Fanta
3. Malta
I want a situation that Coke and Fanta will be the only options that'll will show in the next question's value set. Among these I want to be able to select one.
Which of your favorite drinks do you buy the most?
1. Coke
2. Fanta
I also want to be able to loop through all the occurrences and perform the same function for each occurrence.
Thanks
-
- Posts: 6
- Joined: April 9th, 2024, 3:45 am
- Location: India
Re: Checkbox
Hey hi, please check the example you can get some idea.
Example.
Example.
Code: Select all
<script>
function showOptions() {
var favoriteDrinks = document.getElementsByName('favorite_drinks');
var selectedDrinks = [];
for (var i = 0; i < favoriteDrinks.length; i++) {
if (favoriteDrinks[i].checked) {
selectedDrinks.push(favoriteDrinks[i].value);
}
}
var drinksToDisplay = document.getElementsByName('drinks_to_display');
for (var j = 0; j < drinksToDisplay.length; j++) {
drinksToDisplay[j].style.display = 'none';
}
for (var k = 0; k < selectedDrinks.length; k++) {
var drink = selectedDrinks[k];
var element = document.getElementById(drink);
if (element) {
element.style.display = 'block';
}
}
}
</script>
<form>
<input type="checkbox" name="favorite_drinks" value="coke" onclick="showOptions()"> Coke<br>
<input type="checkbox" name="favorite_drinks" value="fanta" onclick="showOptions()"> Fanta<br>
<input type="checkbox" name="favorite_drinks" value="malta" onclick="showOptions()"> Malta<br>
</form>
<div id="coke" name="drinks_to_display" style="display: none;">
<label>Which of your favorite drinks do you buy the most?</label><br>
<input type="radio" name="coke_option" value="Coke"> Coke<br>
<input type="radio" name="coke_option" value="Fanta"> Fanta<br>
</div>
<div id="fanta" name="drinks_to_display" style="display: none;">
<label>Which of your favorite drinks do you buy the most?</label><br>
<input type="radio" name="fanta_option" value="Coke"> Coke<br>
<input type="radio" name="fanta_option" value="Fanta"> Fanta<br>
</div>
<div id="malta" name="drinks_to_display" style="display: none;">
<label>Which of your favorite drinks do you buy the most?</label><br>
<input type="radio" name="malta_option" value="Coke"> Coke<br>
<input type="radio" name="malta_option" value="Fanta"> Fanta<br>
</div>
Re: Checkbox
Thank you Emmayashri. It works. But please I'd like to know if there's a logic which works in opposite of the ischecked function; one that identifies items that have not been checked in an occurrence.
Thank you for your help.
Thank you for your help.
-
- Posts: 1846
- Joined: December 5th, 2011, 11:27 pm
- Location: Washington, DC
Re: Checkbox
You can use the negation operator:
if not ischecked("A", LANGUAGES_SPOKEN) then