Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.07.2011, 14:37
ALEX666 вне форума Посмотреть профиль Отправить личное сообщение для ALEX666 Найти все сообщения от ALEX666
  № 1  
Ответить с цитированием
ALEX666
 
Аватар для ALEX666

Регистрация: Feb 2009
Адрес: Минск
Сообщений: 56
Отправить сообщение для ALEX666 с помощью ICQ
По умолчанию не работает preventDedault() для TextEvent.TEXT_INPUT

Нужно ограничить ввод в TextInput. Если новый введённый символ делает значение больше допустимого, запрещаем его ввод. (Изменение введённого значения не подходит, такое требование.)

Это не работает:

Код AS3:
 
        _inputWidth = new TextInput();
        _inputWidth.restrict = "0-9";
        _inputWidth.addEventListener(TextEvent.TEXT_INPUT, onChangingWidth);
 
        private function onChangingWidth(e:TextEvent):void{
		var value:Number = parseInt(_inputWidth.text + e.text);
		if(value > 8000)
		{                                         //заходит сюда
			trace(e.cancelable);    //выводит true
			e.preventDefault();     //введённый символ всё равно отображается!
		}
	}


Последний раз редактировалось ALEX666; 01.07.2011 в 15:07.
Старый 01.07.2011, 15:20
saprahan вне форума Посмотреть профиль Отправить личное сообщение для saprahan Найти все сообщения от saprahan
  № 2  
Ответить с цитированием
saprahan

Регистрация: Mar 2011
Сообщений: 48
Вам не поможет TextEvent.TEXT_INPUT. В официальной документации это явно не описывается, но для предотвращения ввода на spark:TextInput'e вам стоит слушать TextOperationEvent.CHANGING и превентить ввод по операции указанной в эвенте. Там не указывается каким будет текстовое значение, но определить его можно по самой текстовой операции.
Есть еще один вариант - использовать TextOperationEvent.CHANGE и откатывать текстовую операцию при недопустимом новом значении.
Третий вариант как самый дешевый - использовать некоторый контроллер-мидлмэн возвращающий предыдущее значение текстового поля, когда новое не соответствует паттерну.

Старый 01.07.2011, 15:49
ALEX666 вне форума Посмотреть профиль Отправить личное сообщение для ALEX666 Найти все сообщения от ALEX666
  № 3  
Ответить с цитированием
ALEX666
 
Аватар для ALEX666

Регистрация: Feb 2009
Адрес: Минск
Сообщений: 56
Отправить сообщение для ALEX666 с помощью ICQ
Насчёт 3-го варианта я думала, но он какой-то кривой вроде, некрасивый... а вот TextOperationEvent.CHANGING не использую ток потому что не знаю как там увидеть введённый символ..
"но определить его можно по самой текстовой операции." - а как именно?
спасибо

Добавлено через 10 минут
..2-ой вариант отменяет весь последний ввод, а не последний символ, поэтому не подходит(

Старый 07.07.2011, 18:10
saprahan вне форума Посмотреть профиль Отправить личное сообщение для saprahan Найти все сообщения от saprahan
  № 4  
Ответить с цитированием
saprahan

Регистрация: Mar 2011
Сообщений: 48
Цитата:
Сообщение от ALEX666 Посмотреть сообщение
Насчёт 3-го варианта я думала, но он какой-то кривой вроде, некрасивый... а вот TextOperationEvent.CHANGING не использую ток потому что не знаю как там увидеть введённый символ..
"но определить его можно по самой текстовой операции." - а как именно?
спасибо

Добавлено через 10 минут
..2-ой вариант отменяет весь последний ввод, а не последний символ, поэтому не подходит(
Объясняю на пальцах. Допустим вы вводите в филд текст с клавиатуры. Вылетает евент TextOperationEvent.CHANGING, у которого в поле operation лежит инстанс класса InsertTextOperation.
У него нам важны значения absoluteStart, absoluteEnd и text. Соответственно куда вставляем и какой текст. По этим значениям уже явно виден пользовательский ввод.

Метод бесспорно нудный и сложный, но 100% действующий.

Старый 08.07.2011, 19:33
ALEX666 вне форума Посмотреть профиль Отправить личное сообщение для ALEX666 Найти все сообщения от ALEX666
  № 5  
Ответить с цитированием
ALEX666
 
Аватар для ALEX666

Регистрация: Feb 2009
Адрес: Минск
Сообщений: 56
Отправить сообщение для ALEX666 с помощью ICQ
Спасибо, такое объяснение и нужно было, хотя уже воспользовалась другим способом:
при событии TextOperationEvent.CHANGING - запоминаю имеющийся текст
при событии TextOperationEvent.CHANGE - проверяю новое значение и возвращаю старое, если не подходит.

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.