您好我在输入框中验证相同的值时遇到问题。被调用的事件必须是输入框的“on change”值,但是我有数字问题。我想写例如“17”,但是在前一个输入框中已经输入值“1”之前它会报告错误因为在我们写17之前有“1” - 7.所以有我的问题:是否有一个选项来检查这个事件类型的相同值,同时避免这个错误?
var textInput:Array = new Array();
for(var a:Number = 0;a < 2; a++){
textInput[a] = new TextField();
textInput[a].type = "input";
textInput[a].y = 10+20*a;
this.addChild(textInput[a]);
textInput[a].addEventListener(Event.CHANGE, changeListener);
}
function changeListener (e:Event):void {
if(Number(e.target.text)>22){
e.target.text = "0";
}
//problem area
else{
if(Number(textInput[1].text) == Number(textInput[0].text)){
e.target.text = "0";
}
}
}
只有2个输入框的简单代码,但在我的项目中它更复杂。当我们在第一个输入框中已经有“1”时,如何定义问题区域有可能写“17”。
答案 0 :(得分:0)
显然,你不能同时允许和禁止同一件事。
您可以执行的操作是验证CHANGE
上的字段,并仅将其标记为有效或无效(可能带有一些错误样式),并在FOCUS_OUT
上重置文本,如果它不是有效的。
这样的事情:
var valid:Boolean = true;
input.addEventListener(Event.CHANGE, validate);
input.addEventListener(FocusEvent.FOCUS_OUT, commit);
function validate(e:Event):void {
var input:TextField = e.currentTarget as TextField;
var value:Number = Number(input.text);
if(value > 22){
valid = true;
input.backgroundColor = 0xff0000; // error style
}else{
valid = false;
input.backgroundColor = 0xffffff; // normal style
}
}
function commit(e:FocusEvent):void {
if(!valid){
var input:TextField = e.currentTarget as TextField;
input.text = "0";
input.backgroundColor = 0xffffff; // normal style
}
}
另外,我建议您将这些内容封装在一个扩展TextField
的类中。