Форум 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)
-   -   ComboBox как "input"-поле: как корректно удалить из списка значение (http://www.flasher.ru/forum/showthread.php?t=132599)

Seroy 16.11.2009 07:05

ComboBox как "input"-поле: как корректно удалить из списка значение
 
Вложений: 1
всем бодрого времени.

уже который день бьюсь над задачкой:

есть компонент ComboBox. Он editable, т.е. доступный для редактирования пользователем, в него вводятся значения (добавляются - нажатием кнопки Add), сортируются по алфавиту и удаляются - при пом. кнопки "Remove".

Код конечно не прелесть (особенно в части валидации ввода: :confused:), но все вроде работает, кроме одного... Никак не могу добиться, чтобы удалялось именно выбранное в списке значение, а не последнее в списке.

привожу код и прикрепляю файлы (может, кто увидит, в чем огрех):

Код AS1/AS2:

my_cb.move(10, 10);
clear_button.move(120, 10);
add_button.move(10, 45);
my_cb.editable="true";// сам компонент
imy_cb=0; // переменная - индекс значений списка
icb_val='----'; // переменная - значения списка
// Create dataprovider.
var myDP_array:Array = new Array();
myDP_array.push({data:imy_cb, label:icb_val});
//myDP_array.push({data:2, label:"Second Item"});
 
my_cb.dataProvider = myDP_array;
 
// Define event listener object.
/*var clearListener:Object = new Object();
clearListener.click = function(evt1_obj:Object){
        for(j=0; j<q1m; j++){
                var leo:String=j+"\n"+_root.my_cb.text;
                if(leo==_global.yak){
                        _root.imy_cb=j;
                        _root.my_cb.removeItemAt(_root.imy_cb);
                        _root.imy_cb--;
                        trace("fe");
                }
        }
  trace(imy_cb);
    trace(j);
        trace(leo);
    trace(yak);
  _root.my_cb.sortItems(upperCaseFunc);
}*/

 
 
// Define event listener object. Функция удаления значения из списка
var clearListener:Object = new Object();
clearListener.click = function(evt1_obj:Object){
 if(icb_val<>'----'){
 my_cb.removeItemAt(imy_cb);
imy_cb-=1;
my_cb.sortItems(upperCaseFunc);
 }
trace(imy_cb);
}
 
// Add Listener.
clear_button.addEventListener("click", clearListener);
 
// сортировка массива
my_cb.sortItems(upperCaseFunc);
function upperCaseFunc(a, b){
return a.label.toUpperCase() > b.label.toUpperCase();
}
 
function add_button_clicked() {
 
        _global.piu=1;
        // допустимый первый символ ввода
        if((my_cb.text!= '')&&(icb_val<> undefined)&&((my_cb.text.charAt(0)== 'А')||(my_cb.text.charAt(0)== 'а')||(my_cb.text.charAt(0)== 'Б')||(my_cb.text.charAt(0)== 'б')||(my_cb.text.charAt(0)== 'В')||(my_cb.text.charAt(0)== 'в')||(my_cb.text.charAt(0)== 'Г')||(my_cb.text.charAt(0)== 'г')||(my_cb.text.charAt(0)== 'Д')||(my_cb.text.charAt(0)== 'д')||(my_cb.text.charAt(0)== 'Е')||(my_cb.text.charAt(0)== 'е')||(my_cb.text.charAt(0)== 'Ё')||(my_cb.text.charAt(0)== 'ё')||(my_cb.text.charAt(0)== 'Ж')||(my_cb.text.charAt(0)== 'ж')||(my_cb.text.charAt(0)== 'З')||(my_cb.text.charAt(0)== 'з')||(my_cb.text.charAt(0)== 'И')||(my_cb.text.charAt(0)== 'и')||(my_cb.text.charAt(0)== 'Й')||(my_cb.text.charAt(0)== 'й')||(my_cb.text.charAt(0)== 'К')||(my_cb.text.charAt(0)== 'к')||(my_cb.text.charAt(0)== 'Л')||(my_cb.text.charAt(0)== 'л')||(my_cb.text.charAt(0)== 'М')||(my_cb.text.charAt(0)== 'м')||(my_cb.text.charAt(0)== 'Н')||(my_cb.text.charAt(0)== 'н')||(my_cb.text.charAt(0)== 'О')||(my_cb.text.charAt(0)== 'о')||(my_cb.text.charAt(0)== 'П')||(my_cb.text.charAt(0)== 'п')||(my_cb.text.charAt(0)== 'Р')||(my_cb.text.charAt(0)== 'р')||(my_cb.text.charAt(0)== 'С')||(my_cb.text.charAt(0)== 'с')||(my_cb.text.charAt(0)== 'Т')||(my_cb.text.charAt(0)== 'т')||(my_cb.text.charAt(0)== 'У')||(my_cb.text.charAt(0)== 'у')||(my_cb.text.charAt(0)== 'Ф')||(my_cb.text.charAt(0)== 'ф')||(my_cb.text.charAt(0)== 'Х')||(my_cb.text.charAt(0)== 'х')||(my_cb.text.charAt(0)== 'Ц')||(my_cb.text.charAt(0)== 'ц')||(my_cb.text.charAt(0)== 'Ч')||(my_cb.text.charAt(0)== 'ч')||(my_cb.text.charAt(0)== 'Ш')||(my_cb.text.charAt(0)== 'ш')||(my_cb.text.charAt(0)== 'Щ')||(my_cb.text.charAt(0)== 'щ')||(my_cb.text.charAt(0)== 'Ы')||(my_cb.text.charAt(0)== 'ы')||(my_cb.text.charAt(0)== 'Э')||(my_cb.text.charAt(0)== 'э')||(my_cb.text.charAt(0)== 'Ю')||(my_cb.text.charAt(0)== 'ю')||(my_cb.text.charAt(0)== 'Я')||(my_cb.text.charAt(0)== 'я'))){
        imy_cb+=1
        my_cb.addItem({data:imy_cb, label:icb_val});
        // сортировка массива
        my_cb.sortItems(upperCaseFunc);
}
 
 
        //trace(my_cb.text);
}
 
add_button.addEventListener("click", add_button_clicked);
// трассировка выделения значения из списка
var cbListener:Object = new Object();
cbListener.change = function(evt_obj:Object) {
 var item_obj:Object = my_cb.selectedItem;
 var ij:String;
 for (ij in item_obj) {
//trace(item_obj[ij]);
_global.yak=item_obj[ij];
 }
trace(imy_cb);
};
my_cb.addEventListener("change", cbListener);
 
this.onEnterFrame=function(){
 
  icb_val= my_cb.text;
  my_cb.restrict="a-zA-Z\\'\\,\\.\\А-Яа-я\u0020\u0401\u0451"; // допустимые символы в поле
 q1m= my_cb.length; // кол-во значений в списке
 
}


alexcon314 16.11.2009 09:24

1. непонятно зачем вам onEnterFrame.
2. километровой длины условие if() меня сильно огорчило.
3. исходник выложен в формате CS4, не смог его открыть, у меня восьмой флэш.
4. а теперь по существу. вы удаляете итем c номером imy_cb, так? эта переменная у вас встречается в коде еще: вначале, где вы присваиваете ей значение 0, в обработчике add_button_clicked(), где вы евеличиваете ее на единицу. у меня сложилось впечатление, что эта переменная у вас всегда равна номеру последнего добавленного итема. в обработчике change вам нужно было просто написать imy_cb=my_cb.selectedIndex и все. или вообще сделать так my_cb.removeItemAt(my_cb.selectedIndex);

Seroy 16.11.2009 10:54

Цитата:

Сообщение от alexcon314 (Сообщение 865850)
1. непонятно зачем вам onEnterFrame.
2. километровой длины условие if() меня сильно огорчило.
3. исходник выложен в формате CS4, не смог его открыть, у меня восьмой флэш.
4. а теперь по существу. вы удаляете итем c номером imy_cb, так? эта переменная у вас встречается в коде еще: вначале, где вы присваиваете ей значение 0, в обработчике add_button_clicked(), где вы евеличиваете ее на единицу. у меня сложилось впечатление, что эта переменная у вас всегда равна номеру последнего добавленного итема. в обработчике change вам нужно было просто написать imy_cb=my_cb.selectedIndex и все. или вообще сделать так my_cb.removeItemAt(my_cb.selectedIndex);

Млин) спасибище вам огромное. Уже не знал, чего делать. На буржуйском форуме (адобовском) выложил вопрос - и ни лешего не ответили. А тут - за 3 часа готов ответ.

1) по поводу onEnterFrame - действительно, в сущности не нужно. Спасибо :)
2) по поводу условия - я так и сяк бился - решил, что вроде бы в AS 2 нет регулярных выражений, а restrict - только для поля годится (не получилось с ним никак для одного символа). Был бы весьма признателен, если б вы подсказали, как тут можно разрулить потолковей. :rolleyes:

alexcon314 16.11.2009 11:28

ограничить набор вводимых символов в поле комбобокса можно так:
my_cb.text_mc.restrict = "А-Я\\а-я";
ну, или что вам там нужно.
ЗЫ
Цитата:

На буржуйском форуме (адобовском) выложил вопрос - и ни лешего не ответили. А тут - за 3 часа готов ответ.
flasher.ru - лучший!:D

Seroy 16.11.2009 11:55

Цитата:

Сообщение от alexcon314 (Сообщение 865863)
ограничить набор вводимых символов в поле комбобокса можно так:
my_cb.text_mc.restrict = "А-Я\\а-я";
ну, или что вам там нужно.
ЗЫ

flasher.ru - лучший!:D

для поля-то есть - ЗЫ:
Код AS1/AS2:

my_cb.restrict="a-zA-Z\\'\\,\\.\\А-Яа-я\u0020\u0401\u0451";

Нужно было в особинку - для первого символа поля (чтобы апостроф или дефис не ввели). Но вся равно - пасибо) :)


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

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