AS2 — Проверьте, равно ли имя массива [x] некоторому тексту

#arrays #text #for-loop #actionscript-2

#массивы #текст #for-цикл #actionscript-2

Вопрос:

Что я делаю не так?

Код:

 sample_txt.text = "sat";
var myArray:Array = new Array ("the", "cat", "sat", "on", "the", "mat");
arrsLength = Number(myArray.length);
for (var i = 0; i<arrsLength; i  ){

        ...some stuff...

    btn.onPress=function(){
        if(myArray[i]==sample_txt.text){
            trace (text found!);
        }else{
            trace (text not found!);
        }
    }
}
  

Вывод:

 text not found!
  

Что мне нужно сделать, это проверить, равен ли текст во входном текстовом поле одному из значений массива, и запустить конкретную функцию, зависит от результата.

С уважением,

Артур.

Ответ №1:

Проблема заключается в видимости и в объявлении обработчика ‘onPress’. Вы должны объявить обработчик ‘onPress’ вне цикла ‘for’, потому что на каждой итерации цикла вы повторно объявляете свой обработчик. И событие, если вы исправите проблему с видимостью, ваш обработчик ‘onPress’ всегда будет иметь ‘myArray [i]’, равный последнему значению элемента массива.

Итак, вы должны сделать так:

     var btn:MovieClip = this.createEmptyMovieClip("btn", 100);
    btn.beginFill(0xebebeb, 100);
    btn.moveTo(0, 0);
    btn.lineTo(0, 100);
    btn.lineTo(100, 100);
    btn.lineTo(100, 0);
    btn.lineTo(0, 0);
    btn.endFill();

    var sample_txt:Object = {text: "sat"};

    var myArray:Array = new Array ("the", "cat", "sat", "on", "the", "mat");
    var arrsLength:Number = myArray.length;
    for (var i:Number = 0; i < arrsLength; i  ) {
      //... some stuff...
    }

    btn.onPress = function() {
      for (var i:Number = 0; i < myArray.length; i  ) {
        if (myArray[i] == sample_txt.text) {
          trace("text found!");
          return;
        }
      }
      trace("text not found!");
    }
  

Но убедитесь, что ‘sample_txt’ виден внутри обработчика ‘onPress’.