2015-06-24 4 views
0

Здравствуйте, у меня возникла проблема с проверкой идентичных значений в поле ввода. Событие называется значением «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"; 
     } 
    } 
} 

Существует простой код с двумя полями ввода, но в моем проекте он более сложный. Как определить проблемную область, чтобы иметь возможность писать «17», когда у нас есть «1» уже в 1-м поле ввода.

+0

Очень сложно следовать вашему описанию, которое очень расплывчато. Добавьте код, который у вас есть до сих пор, как он должен вести себя и как он ведет себя. – null

+0

добавлен пример :) – Jasiu

+0

Спасибо, это помогает. Я не могу полностью следовать вашим объяснениям. Не могли бы вы написать, какое поведение вы хотите создать? Вы описываете, какие проблемы у вас есть с вашим текущим решением, но вы не можете объяснить (по крайней мере, мне), какова ваша первоначальная цель. Учитывая, что у вас есть несколько текстовых полей, что именно должен делать пользователь, что должно произойти? Сделайте скриншот, если вам нелегко его объяснить. – null

ответ

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.

Смежные вопросы