#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’.