PennController for IBEX › Forums › Support › Selecting multiple options › Reply To: Selecting multiple options
June 19, 2020 at 12:34 pm
#5683
Jeremy
Keymaster
Hi,
You will need to create one Selector per Image, as Selectors were designed to represent exclusive choices. You will also need to create a Var element to determine whether a click on the image should select or unselect it. Since you will have to do this for all of your images, it’s best to just define a function that you call on each of your images, like this:
const newToggleImage = (name,file) => [ newVar(name+"-var", 1), newSelector(name+"-sel") .frame("solid 6px black") .callback( getVar(name+"-var").set(v=>1-v).test.is(1).success(getSelector(name+"-sel").unselect()) ) .log() , newImage(name, file) .size(200,200) .selector("shapes").selector(name+"-sel") ] Template( GetTable("myTable_testing").filter( row => (row.n_correct == "2c") & (row.pol == "pos")) , row => newTrial("testing_2cor_pos", newSelector("shapes").disable() , newText( "Click on any and all pictures corresponding to "+row.word.toUpperCase() ) .css("font-size", "30px") .center() .bold() .print() , newToggleImage("target_1", row.picture), newToggleImage("target_2", row.p1), newToggleImage("d2", row.p2), newToggleImage("d3", row.p3), newToggleImage("d4", row.p4), newToggleImage("d5", row.p5) , newCanvas( 'myCanvas', 700, 500) .add( 20, 40, getImage("target_1"), 0 ) .add( 20, 270, getImage("target_2"), 1 ) .add( 257, 40, getImage("d2"), 2 ) .add( 257, 270, getImage("d3"), 3 ) .add( 495, 40, getImage("d4"), 4 ) .add( 495, 270, getImage("d5"), 5 ) .center() .print() , getSelector("shapes").shuffle() , newButton("confirm") .print() .wait() ) .log("target_1", row.picture) .log("target_2", row.p1) .log("d2", row.p2) .log("d3", row.p3) .log("d4", row.p4) .log("d5", row.p5) )
Given that several people have expressed the need for a checkbox-like behavior, I will consider implementing this option in a future release of PennController
Jeremy