Actionscript 3 在更改时验证相同的值

Actionscript 3 在更改时验证相同的值,actionscript-3,flash,pseudocode,Actionscript 3,Flash,Pseudocode,您好,我在验证输入框中的相同值时遇到问题。调用的事件必须是输入框的“更改”值,但我对数字有问题。我想写例如“17”,但在之前的输入框中已经输入了值“1”之前,它会报告错误,因为在我们写17之前有“1”-7。所以我的问题是:是否有一个选项可以在避免此错误的同时检查此事件类型的相同值 var textInput:Array = new Array(); for(var a:Number = 0;a < 2; a++){ textInput[a] = new TextField();

您好,我在验证输入框中的相同值时遇到问题。调用的事件必须是输入框的“更改”值,但我对数字有问题。我想写例如“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";
        }
    }
}
var textInput:Array=new Array();
对于(变量a:Number=0;a<2;a++){
textInput[a]=新的TextField();
text输入[a]。type=“输入”;
textInput[a].y=10+20*a;
this.addChild(textInput[a]);
textInput[a].addEventListener(Event.CHANGE,changeListener);
}
函数changeListener(e:事件):void{
如果(数字(如目标文本)>22){
e、 target.text=“0”;
}
//问题领域
否则{
if(Number(textInput[1].text)=Number(textInput[0].text)){
e、 target.text=“0”;
}
}
}

有两个输入框的简单代码,但在我的项目中它更复杂。当第一个输入框中已经有“1”时,如何定义问题区域,使其有可能写出“17”。

显然,你不能同时允许和禁止同一件事

您可以在
CHANGE
上验证字段,只将其标记为有效或无效(可能带有一些错误样式),在
FOCUS\u 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

的类中。很难理解您的描述,这是非常模糊的。请添加到目前为止您所拥有的代码,以及它的行为方式。谢谢,这很有帮助。我不能完全理解你的解释。你能写下你想创造什么样的行为吗?你在描述你目前的解决方案有哪些问题,但你没有(至少对我)解释你最初的目标是什么。假设您有几个文本框,那么用户应该体验什么,应该发生什么?如果您很难解释,请制作一个屏幕截图。1)inputbox1=“1”2中的文本现在用户想在inputbox2中写:“11”,但他不能,因为如果有条件,请在输入“1”后将其值更改为“0”。如何在允许输入“11”时写入此条件。也许除了使用IF station还有其他方法。如果您不想将输入框设置回“0”,为什么有这样的代码?同样,不要解释你有什么问题,解释你最后想做什么。为什么你有这些文本框,为什么你想比较它们,这一切的意义是什么?很明显,您当前的解决方案不起作用,如果它起作用,您不会在这里寻求帮助。无需进一步说明当前解决方案,只需详细说明您尝试此解决方案的原因以及希望实现的功能。我必须检查22个输入框的更改值,可能有22(1..22)个唯一的数字值。更改后,我必须检查每个框中是否有唯一的值。若并没有,那个么触发事件的输入框将返回到“0”值。