Компонент Flash ComboBox выбирает неправильное значение в веб-браузере (отлично работает в IDE) - PullRequest
0 голосов
/ 31 июля 2009

Я добавил стандартный компонент Flash ComboBox в свой проект CS3 (AS2). Это часть одного из моих символов библиотеки, а не созданная на сцене.

Я не внес никаких изменений в скины, исходный код и т. Д. ComboBox.

Когда пользователь нажимает на ComboBox, список выпадает из списка, пользователь использует мышь для выбора элемента, и этот элемент передается в код, который воздействует на него.

В Flash IDE все работает нормально. Но когда я развертываю это на веб-сайте и просматриваю страницу Flash через веб-браузер, когда пользователь щелкает значение в раскрывающемся списке, в поле ввода вводится другое значение. (Я использую Firefox 3.0.12 на MAC, но наш QA видит проблему в других браузерах и версиях). Это же неверное значение также передается моему обратному вызову события изменения.

Проблема очевидна для Flash Player 9 и 10.

Я попробовал два способа получить значение из ComboBox.

а) Прямой доступ к компоненту, чтобы получить выбор. При использовании этого подхода, если пользователь использует клавиатуру для непосредственного выбора значения типа ИЛИ в числе, он работает в IDE и браузере. Не удается выбрать только мышь.

   var num_pages_value:Number = Number(num_pages.num_pages_cb.selectedItem["data"]);

б) Использование обработчика событий. При использовании этого подхода доступ к ComboBox с клавиатуры перестает работать. Вот как я настраиваю обработчик событий:

var cb: ComboBox = num_pages.num_pages_cb;

// Без mx.events.EventDispatcher.initialize событие изменения никогда не запускается !!!
// Не в документах. Выглядело так трудно, чтобы выяснить это ... mx.events.EventDispatcher.initialize (cb); cb.addEventListener («изменить», это);

Вот сам обработчик события.

изменение функции (evt) { num_pages_value = Number (evt.target.selectedItem.label); }

Я подозреваю, что вызов mx.events.EventDispatcher.initialize нарушает взаимодействие с клавиатурой, но без него мой обработчик никогда не вызывается. Но ни один из подходов не позволяет пользователю выбрать желаемое значение. Выберите 7, и вы получите 9, выберите 3, и вы получите 6. И ценность, которую вы получаете, не всегда одинакова.

1 Ответ

0 голосов
/ 31 декабря 2009

Я пытаюсь воссоздать проблему.

Пока у меня работал простой тест.

Вот мой код:

import mx.controls.ComboBox;
import mx.controls.Label;

var cb:ComboBox = this.createClassObject(ComboBox,'cb',0);
for(var i:Number = 0 ; i < 10 ; i++) cb.addItem({label:'item'+(i+1)});

var l:Label = this.createClassObject(Label,'l',1,{_x:cb.width,text:'selection'});

var listener:Object = new Object();
listener.change = function(event:Object):Void{
 l.text = cb.selectedItem.label;
}
cb.addEventListener('change',listener);

У меня был ярлык иComboBox в библиотеке.Метка изменяется с помощью мыши с сгенерированным по умолчанию HTML-файлом из CS3.

Для этого теста я использовал:

  • Flash Player 10,0,32,18 Отладчик
  • Mac OS 10.5.6
  • Firefox 3.5.6 (Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv: 1.9.1.6) Gecko / 20091201 Firefox / 3.5.6 GTB6)

HTH, Джордж

...