Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как отключить действие клавиши? (http://www.flasher.ru/forum/showthread.php?t=136525)

Legoo 19.02.2010 00:41

Как отключить действие клавиши?
 
Есть динамическое текстовое поле, и требуется отключить действия таких клавиш как "Backspase", "Delete".
Кто-нибудь сталкивался с этим?

udaaff 19.02.2010 01:15

Т.е., на сколько я понял, вам необходимо запретить пользователю изменять уже введенный текст. При помощи onChanged отслеживайте, изменился ли уже введенный текст, и если да, то меняйте его на старое значение.

samana 19.02.2010 01:18

Вложений: 1
Возможно есть такой способ, но я его не знаю. Попробовал так, текст не удаляется, но каретка двигается влево.
Код AS1/AS2:

Key.addListener(inputText);
snapText = "";
down = false;
inputText.onKeyDown = function() {
        if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
                snapText = this.text;
                down = true;
 
        }
};
inputText.onKeyUp = function() {
        if (down) {
                this.text = snapText;
                down = !down;
        }
};


Legoo 19.02.2010 17:53

Спасибо за помощь!
Сама идея ясна, гениально !!!
Вот с реализацией загвоздка. Переменная "this.text" берет значание какого текстового поля.
Пытался вот так:
Код AS1/AS2:

per = "";
down = false;
 
_root.createTextField("T",1,50,50,100,100);
_root.T.text="";
_root.T.border=true;
_root.T.type="input";
 
var obj:Object = {};
Key.addListener(obj);
 
per = T.text;
 
obj.onKeyDown = function() {
 
        if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
                T.text = per;
                down = true;
 
        }
};
 
obj.onKeyUp = function() {
        if (down) {
                per = T.text;
                down = !down;
        }
};

Если можно, уважаемый SAMANA, скинь fla файл :)

samana 19.02.2010 18:04

У тебя были ошибки, ты перепутал немного. Вот правильный код, в коментах посмотри я написал где были ошибки
Код AS1/AS2:

per = "";
down = false;
 
_root.createTextField("T",1,50,50,100,100);
_root.T.text="";
_root.T.border=true;
_root.T.type="input";
 
var obj:Object = {};
Key.addListener(obj);
 
//per = T.text; Зачем переопределять ведь это не нужно???
 
obj.onKeyDown = function() {
 
        if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
                per=T.text //Тут было наоборот T.text=per, а ведь смысл в том чтобы
                //на этом этапе сохранить текст в переменную
                down = true;
 
        }
};
 
obj.onKeyUp = function() {
        if (down) {
                T.text=per// а тут уже тексту присваивается значение из переменной.
                //А было опять же наоборот per=T.text
                down = !down;
        }
};


Legoo 19.02.2010 18:28

И есть еще проблема в реализации от SAMANA. Kогда нажимаем "Backspace" долго, стирает все. Как избежать этого?

Добавлено через 6 минут
Спасибо за исправления :)

samana 20.02.2010 00:27

Пошел другим путём, и он оказался лучше и логичнее, к тому же работает правильно.
Код AS1/AS2:

_root.createTextField("inputText",1,0,0,200,30);
inputText.type = "input";
inputText.border = true;
 
Key.addListener(inputText);
 
inputText.onKeyDown = function() {
        if (Key.isDown(Key.BACKSPACE) || Key.isDown(Key.DELETEKEY)) {
                this.type = "dynamic";
 
        }
};
inputText.onKeyUp = function() {
        this.type = "input";
};


Legoo 20.02.2010 01:20

Супер!!!
Все гениальное просто :)


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

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