I’ve got a form that the user enters numeric values in to a series of text Input fields. I want to allow the user to use the arrow keys in addition to the tab keys to control the active focus of the fields.
I set up a 2D array with the names of the input fields as values. I’m trying to call the name of the input field from the array and then assigning the focus, but I’m getting Error 1067 implicit coercion errors.
stage.focus=nextCellName;
stage.focus=prevCellName;
import flash.text.TextField;
import flash.events.MouseEvent;
var line:String="------------------------------------";
var d4_value1:Number;
var d4_value2:Number;
var d4_value3:Number;
var d4_value4:Number;
var d4_sumValue:Number;
var p3_value1:Number;
var p3_value2:Number;
var p3_value3:Number;
var p3_sumValue:Number;
var currentCellNum:Number;
var currentCellName:String;
var prevCellName:String;
var nextCellName:String;
d4_1.addEventListener(Event.CHANGE, changeHandlerD4);
d4_2.addEventListener(Event.CHANGE, changeHandlerD4);
d4_3.addEventListener(Event.CHANGE, changeHandlerD4);
d4_4.addEventListener(Event.CHANGE, changeHandlerD4);
//
p3_1.addEventListener(Event.CHANGE, changeHandlerP3);
p3_2.addEventListener(Event.CHANGE, changeHandlerP3);
p3_3.addEventListener(Event.CHANGE, changeHandlerP3);
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(FocusEvent.FOCUS_IN, focusHandler);
//array of inputText fields
var myArray:Array=["d4_1","d4_2","d4_3","d4_4","p3_1","p3_2","p3_3"];
var index:int;
d4_1.tabIndex=1;
d4_2.tabIndex=2;
d4_3.tabIndex=3;
d4_4.tabIndex=4;
p3_1.tabIndex=5;
p3_2.tabIndex=6;
p3_3.tabIndex=7;
d4_sum.backgroundColor=0x336600;
p3_sum.backgroundColor=0x336600;
d4_1.maxChars=1;
d4_1.restrict="0-9";
d4_1.maxChars=1;
d4_1.restrict="0-9";
function goNext():void {
//go to the next text field
trace("goNext");
//stage.focus=nextCellName;
}
function goPrev():void {
//go to the previous text field
trace("goPrev");
//stage.focus=prevCellName;
}
function focusHandler(e:FocusEvent):void {
trace("focusHandler:"+e.target.name);
//get name of inputField from array given index number
index=myArray.indexOf(e.target.name);
currentCellNum=index;
currentCellName=myArray[currentCellNum];
nextCellName=myArray[currentCellNum+1];
prevCellName=myArray[currentCellNum-1];
//show current index, current, next, previous cells
currentCell.text = currentCellName;
nextCell.text = nextCellName;
prevCell.text = prevCellName;
currentIndex.text=String(currentCellNum);
trace("focusHandler index:"+index);
trace("focusHandler currentCellNum: "+currentCellNum);
trace(line);
}
function keyDownHandler( e:KeyboardEvent ):void {
if (e.charCode==13) {
keyPressedTxt.text="Enter";
goNext();
} else if (e.keyCode == 37) {
trace("LEFT");
keyPressedTxt.text="Left";
goPrev();
} else if (e.keyCode == 38) {
trace("UP");
keyPressedTxt.text="Up";
goPrev();
} else if (e.keyCode == 39) {
trace("RIGHT");
keyPressedTxt.text="Right";
goNext();
} else if (e.keyCode == 40) {
trace("DOWN");
keyPressedTxt.text="Down";
goNext();
}
}
function changeHandlerD4(e:Event) {
var index:int=myArray.indexOf(e.target.name);
trace("Index of Array is:"+index);
currentCellNum=index;
sumD4();
trace(line);
}
function changeHandlerP3(e:Event) {
var index:int=myArray.indexOf(e.target.name);
trace("Index of Array is:"+index);
currentCellNum=index;
sumP3();
trace(line);
}
function sumD4() {
d4_value1=Number(d4_1.text);
d4_value2=Number(d4_2.text);
d4_value3=Number(d4_3.text);
d4_value4=Number(d4_4.text);
d4_sumValue=Number(d4_value1+d4_value2+d4_value3+d4_value4);
d4_sum.text=String(d4_sumValue);
}
function sumP3() {
p3_value1=Number(p3_1.text);
p3_value2=Number(p3_2.text);
p3_value3=Number(p3_3.text);
p3_sumValue=Number(p3_value1+p3_value2+p3_value3);
p3_sum.text=String(p3_sumValue);
}
Any help appreciated!