Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Number не работает. Почему?
Flash Zone Forum > Macromedia Flash > ActionScript
garrrold
Привет, друзья!
ActionScript 2.0. Есть 2 текстовых поля для ввода текста с переменными n и m и один динамический текст с переменной s. Переменные присвоены в палитре "свойства", раздел "параметры".
На кнопке код: on(release){s = Number(n) + Number(m);}
Почему при вводе чисел в поля n и m не выводится их сумма?? почему не работает перевод текста в числа функцией Number?? выводит во всех проверенных мною версиях Adobe Flash только одно -- NaN.
Подскажите, где здесь может быть ошибка.
Всем спасибо.
MustLive
garrrold

Нужно писать Number, а ты в обработчике нажатия написал Numder.
garrrold
Цитата(MustLive @ 11.03.2012 - 19:37) *
garrrold

Нужно писать Number, а ты в обработчике нажатия написал Numder.


Да нет, я просто опечатался. Number, конечно же.
Я просто вообще ничего не понимаю, переустанавливал Flash, Adobe AIR, flash-плеер -- никакого результата...
точнее результат один -- NaN...
MustLive
Цитата
Да нет, я просто опечатался. Number, конечно же.

garrrold, главное, чтобы в AS коде своей флешки ты не опечатался.

Если этот код у тебя правильно задан, но выдаёт "NaN", значит ты мог не так считывать данные из полей. Перед присваиванием суммы переменной s задай строковые значения переменным n и m. Если код сработает корректно, значит у тебя Number работает корректно (как и должно) и проблема именно в считывании данных из текстовых полей.

Код
n = "1";
m = "1";
s = Number(n) + Number(m);
garrrold
Цитата(MustLive @ 12.03.2012 - 05:11) *
Код
n = "1";
m = "1";
s = Number(n) + Number(m);

этот код работает корректно. проблема именно в считывании данных из текстовых полей. как это исправить? почему при вводе данных в текстовое поле Number отказывается переводить их в число?
chingachgoog
Цитата
Переменные присвоены в палитре "свойства", раздел "параметры".


Не надо так делать. Вкупе с обработчиком на кнопках on(release) не сложно запутаться в путях и областях видимости
Надо именовать само текстовое поле и потом обращаться к его переменной text, например:

Код
trace(Number(имя_моего_текстового_поля.text))


Ну и обработчик тоже стоит делать по-другому, писать в кадре, а не на самой кнопке:

Код
имя_моей_кнопки.onRelease=function() { ... }
garrrold
 сделал вот так on(release){s.text = Number(n.text)+ Number(m.text);}
работает.
будем ковыряться дальше, всем спасибо
MustLive
garrrold

Всегда пожалуйста.

Цитата
почему при вводе данных в текстовое поле Number отказывается переводить их в число?

Как я уже объяснил ранее, не Number отказывается переводить, а данные прочитаны некорректно. Когда исходные данные "пустые" (потому что некорректно прочитаны и в переменных n и m "пусто"), то и сумма будет "NaN". Соответственно правильно их прочитав, можно будет их конвертировать в числовые значения и получить сумму (что ты наконец-то сделал и всё заработало).

Правильный подход к считыванию значений текстовых полей - это считывание через обращение к свойству text именованного текстового поля (name.text), а не "старым методом" через задание имени переменной в свойствах поля. Этот метод применялся активно во времена Флеш 4 и в некоторых случаях работает вполне легко (с использованной тобою простой записью), но в более сложных случаях, которые встречаются чаще, так не работает (т.е. к текстовым полям  и переменным уже сложнее обратиться, из-за области видимости). Начиная с Флеш 5 активно используется новый метод, так сказать ООПшный, через name.text, подобно другим ООП ЯП, и именно он и рекомендован к использованию (во всех версиях ActionScript).

Тебе явно попался устаревший пример кода или руководство с описанием такого метода. И я тебя и подводил к тому, чтобы ты взял и почитал хепл/документацию/руководство и правильно записал код чтения данных с текстовых полей, но chingachgoog решил не церемониться и сразу выдал правильную запись кода wink.gif. И он совершенно верно заметил, как это мы на форуме практикуем, чтобы ты обработчик нажатия использовал "в кадр", а не "на кнопку", который также давно считается устаревшим (так что эту часть кода ты также можешь улучшить).
webs-
Сталкивался с подобной проблемой, только не из текстовых полей, а с данными полученными с сервера, от скрипта рнр. Особенно проблемно с десятичными дробями, выкручивался разделяя строку по запятой в дроби и загоняя данные в массив, а потом уже из массива конвертировал строку в номер. Просто сменить тип переменной загнав ее в var newNum:Number = new Number(myVar) - никак. В учебнике написано что этот способ правильный, НО с данными полученными с сервера это не работает, может потому что там запятая стоит в десятичной дроби а во флешке точка sad.gif  х.з. может нужно тоже к какому то свойству обращаться?
MustLive
webs-

Проблем с данными полученными из сервера в идеале быть не должно smile.gif. И если у тебя они возникают, нужно разбираться и решать эту проблему.

Я с дробными данными с сервера не работал, только с другими типами данных и с ними проблем не было. Но, к примеру, насчёт знака дроби, то это может сказаться, если в разных языках используется различный символ разделителя. Поэтому если тебе данные с сервера приходят с запятой, а в AS (как и в большинстве языков программирования) используется точка, то тут есть два варианта. Или с сервера возвращай дробные числа с точкой, или замени в "строке данных с сервера" запятую на точку, и тогда, сконвертировав строку в число, ты получишь правильный результат.
Русская версия IP.Board © 2001-2013 IPS, Inc.