OS (e.g. Win10): macOS Monterey
PsychoPy version (e.g. 1.84.x): 2021.2.3
**Standard Standalone? : yes
What are you trying to achieve?:
Hi everyone,
I am building an experiment and in one of the tasks I have participants fill out a form using free text. I use the responses in this form to build the stimuli for a later task so it is important that I be able to check the validity of responses before having them move on to the next routine. Since I will be running the experiment online I won’t be able to check the validity myself.
Therefore I am trying to implement a validity check using the code component. Essentially I want to check that the responses to my form items are all numerical. Only when it has been checked that all items have been completed and that all items are a number do I want them to move on to the next stage.
What did you try to make it work?:
Since buttons aren’t supported online, I made a text component called submit_form and a mouse component called submit. If the text of submit_form is clicked then participants will move on to the next step.
I have tried playing around with the opacity of the submit_form component so that the text remains invisible until participants meet the conditions: i.e. a completed form and all numerical answers, but I have been unsuccessful.
This is what my routine looks like:
I have instructions for how to fill out the form, then I have the form titled MonEval_form, the submit_form text component and corresponding mouse component. I have the submit_form opacity set to repeat every frame so that I can update the opacity.
In the end of routine tab I have the following code:
if MonEval_form.complete:
for eachResponse in range(len(MonEval_form.items)):
thisResponse= MonEval_form.items[eachResponse]['response']
if isdigit(thisResponse)== True:
submit_form.opacity=1
elif isdigit(thisResponse)==False:
submit_form.opacity=0
As I mentioned this did not work. So I tried a different approach:
if MonEval_form.complete:
for eachResponse in range(len(MonEval_form.items)):
thisResponse= MonEval_form.items[eachResponse]['response']
if thisResponse.isnumeric()==True:
validResponses.append(True)
elif thisResponse.isnumeric() == False:
validResponses.append(False)
if all(validResponses)==True:
submit_form.opacity=1
Here I start with an empty list called validResponses in which I store for each of the items whether or not it is valid input, then I check that all the list is all True and based on that I format the opacity to be 1, making the text visible. This also did not work.
I tried putting the code into the every frame tab instead of end of routine tab but that didn’t work either. Note that I don’t get error messages, the submit_form component just never appears on screen, indicating that the opacity is not updated.
If anyone has some suggestions as to how to achieve a validity check I’d be super grateful!