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

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

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

Регистрация: Jun 2008
Адрес: пока еще здесь
Сообщений: 198
По умолчанию ComboBox как "input"-поле: как корректно удалить из списка значение

всем бодрого времени.

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

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

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

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

Код 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; // кол-во значений в списке
 
}
Вложения
Тип файла: rar probbaCombo.rar (177.0 Кб, 38 просмотров)

Старый 16.11.2009, 09:24
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
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);

Старый 16.11.2009, 10:54
Seroy вне форума Посмотреть профиль Отправить личное сообщение для Seroy Найти все сообщения от Seroy
  № 3  
Ответить с цитированием
Seroy

Регистрация: Jun 2008
Адрес: пока еще здесь
Сообщений: 198
Цитата:
Сообщение от alexcon314 Посмотреть сообщение
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 - только для поля годится (не получилось с ним никак для одного символа). Был бы весьма признателен, если б вы подсказали, как тут можно разрулить потолковей.

Старый 16.11.2009, 11:28
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
ограничить набор вводимых символов в поле комбобокса можно так:
my_cb.text_mc.restrict = "А-Я\\а-я";
ну, или что вам там нужно.
ЗЫ
Цитата:
На буржуйском форуме (адобовском) выложил вопрос - и ни лешего не ответили. А тут - за 3 часа готов ответ.
flasher.ru - лучший!


Последний раз редактировалось alexcon314; 16.11.2009 в 11:34.
Старый 16.11.2009, 11:55
Seroy вне форума Посмотреть профиль Отправить личное сообщение для Seroy Найти все сообщения от Seroy
  № 5  
Ответить с цитированием
Seroy

Регистрация: Jun 2008
Адрес: пока еще здесь
Сообщений: 198
Цитата:
Сообщение от alexcon314 Посмотреть сообщение
ограничить набор вводимых символов в поле комбобокса можно так:
my_cb.text_mc.restrict = "А-Я\\а-я";
ну, или что вам там нужно.
ЗЫ

flasher.ru - лучший!
для поля-то есть - ЗЫ:
Код AS1/AS2:
my_cb.restrict="a-zA-Z\\'\\,\\.\\А-Яа-я\u0020\u0401\u0451";
Нужно было в особинку - для первого символа поля (чтобы апостроф или дефис не ввели). Но вся равно - пасибо)

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

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

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


 


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


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