在更改时验证相同的值

时间:2015-06-24 11:35:46

标签: actionscript-3 flash pseudocode

您好我在输入框中验证相同的值时遇到问题。被调用的事件必须是输入框的“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”。

1 个答案:

答案 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的类中。