PennController for IBEX › Forums › Support › Multi Character Key Press › Reply To: Multi Character Key Press
April 30, 2020 at 12:01 pm
#5179
Keymaster
Hi Sam,
EDIT: actually you don’t have to use the Function element as I suggest below, but you’ll still need a little bit of javascript when setting and testing your Var element:
Template( "fulldesign.csv" , variable =>
newTrial( "task" ,
newVar("fullstring", "")
,
newText("Please type your guess").print()
,
newKey("guess", "")
.callback(
getVar("fullstring").set( v=>v+getKey("guess").value )
)
,
newKey("Enter").wait()
,
getVar("fullstring").test.is( v=>v.match(new RegExp(variable.answer+"$","i")) )
.success( newText("Correct!").print() )
.failure( newText("Incorrect").print() )
,
newButton("next").print().wait()
)
)
End of edit
I think you’ll have to inject some javascript in there, using the Function element:
Template( "fulldesign.csv" , variable =>
newTrial( "task" ,
newText("Please type your guess").print()
,
newFunction(function(){
this.fullstring = "";
let oldOnkeydown = document.onkeydown;
document.onkeydown = e=>{
if (oldOnkeydown instanceof Function) oldOnkeydown.call(document, e);
this.fullstring += e.key;
};
}).call()
,
newKey("Enter").wait()
,
newFunction(function(){
return this.fullstring.match(new RegExp(variable.answer+"$","i"))!=null;
}).test.is( true )
.success( newText("Correct!").print() )
.failure( newText("Incorrect").print() )
,
newButton("next").print().wait()
)
)
Two comments on your code:
- The setVar command (as all PennController commands) is executed immediately when the script encounters it, so unless it is in a callback command, it will only be executed once. In your case, you call it immediately after creating the Key element, so your Var element will remain empty.
- The after command adds an element to the right of another element when printed on the page, but it does not change the value of either element
Jeremy
-
This reply was modified 5 years, 6 months ago by
Jeremy. Reason: Added a Function-less script