Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ana Lúcia de Oliveira

ComboBox com comportamento estranho

Recommended Posts

Olá pessoal!

 

Estou com problemas com o componente ComboBox. Segue descrição do problema:

 

Quando o usuário abre a dropdown list e navega pelos itens da combo usando o teclado (setas p/ cima ou p/ baixo), o item "selecionado" é atualizado no TextInput. Porém, quando o usuário tecla TAB ou ESC, a dropdown list é fechada, o último item selecionado é mostrado no TextInput, mas o evento onchange não é gerado. Pelo que vi no código, isto é assim mesmo, mas não entendo porque o item selecionado ficou no TextInput. Do ponto de vista do usuário, a impressão é que o item foi de fato alterado. Na minha impressão, o evento onchange deveria ter sido gerado.

 

Alguém pode esclarecer este comportamento?

 

Desde já, agradeço.

 

Ana.

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho mesmo esse erro, mas você já testou usar o evento "close", pode ser que sirva?

 

 

 

[]´s

Olá!!

 

Já tentei usar o evento "close", mas este evento apenas fecha a dropdown list. O evento "change" só é gerado quando se tecla "enter" ou seleciona-se o item com o mouse. Eu até entendo que o ESC deveria fechar a lista sem fazer alterações, mas o problema é que o TextInput é alterado. O mesmo ocorre quando você nageva pelos itens com o teclado e fecha a lista clicando na seta da combo (como se fosse ESC ou TAB), ou seja, tb não gera o evento de "change". Eu penso que possa ser um bug, pois o comportamento do componente List é que a medida que você vai nagevando o valor selecionado é alterado, e um dos componentes da combo é o List.

 

O que fiz para resolver isso foi customizar a combobox. Eu criei um MC contendo uma combo, cujo a classe homônima a este MC estende a classe ComboBox. Na classe estendida, eu disparo o evento "change" quando o evento "close" é gerado e o item selecionado é diferente do anterior. Não acho a solução mais elegante, mas não encontrei outra melhor. Ainda estou acertando os detalhes para ver se funciona em todos os casos. Gostaria de entender melhor este comportamento...

 

Sds,

 

Ana.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acabei de fazer um teste aqui e funcionou

 

 

cliquei na combo para abrir, fui com o teclado mudando o item, e quando aperto ESC ou TAB, ele executa o evento change

 

me fala se você ta usando AS2 ou AS3 que eu posto o exemplo

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acabei de fazer um teste aqui e funcionou

 

 

cliquei na combo para abrir, fui com o teclado mudando o item, e quando aperto ESC ou TAB, ele executa o evento change

 

me fala se você ta usando AS2 ou AS3 que eu posto o exemplo

 

 

 

[]´s

 

Estou usando AS2 (Flash MX 2004). A versão do Player instalado no IE e no FF é 10.0.22.87.

 

Sds,

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça o teste num arquivo novo

 

coloque um combo chamada "my_cb", e um caixa de texto chamada "txt"

 

o codigo:

// Add Item to List.
my_cb.addItem({data:1, label:"11 Item"});
my_cb.addItem({data:2, label:"22 Item"});
my_cb.addItem({data:3, label:"33 Item"});
my_cb.addItem({data:4, label:"44 Item"});
my_cb.addItem({data:5, label:"55 Item"});
my_cb.addItem({data:6, label:"66 Item"});
my_cb.addItem({data:7, label:"77 Item"});
my_cb.addItem({data:8, label:"88 Item"});
my_cb.addItem({data:9, label:"99 Item"});
my_cb.addItem({data:0, label:"00 Item"});


// Create Listener Object.
var cbListener:Object = new Object();

// Assign function to Listener Object.
cbListener.change = function(event_obj:Object) {
 txt.text = my_cb.selectedItem.label
};

// Add Listener.
my_cb.addEventListener("change", cbListener);

 

aqui funcionou, teste ai pra ver, se funcionar pode ser algo no resto do seu código que esta interferindo

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça o teste num arquivo novo

 

coloque um combo chamada "my_cb", e um caixa de texto chamada "txt"

 

o codigo:

// Add Item to List.
my_cb.addItem({data:1, label:"11 Item"});
my_cb.addItem({data:2, label:"22 Item"});
my_cb.addItem({data:3, label:"33 Item"});
my_cb.addItem({data:4, label:"44 Item"});
my_cb.addItem({data:5, label:"55 Item"});
my_cb.addItem({data:6, label:"66 Item"});
my_cb.addItem({data:7, label:"77 Item"});
my_cb.addItem({data:8, label:"88 Item"});
my_cb.addItem({data:9, label:"99 Item"});
my_cb.addItem({data:0, label:"00 Item"});


// Create Listener Object.
var cbListener:Object = new Object();

// Assign function to Listener Object.
cbListener.change = function(event_obj:Object) {
 txt.text = my_cb.selectedItem.label
};

// Add Listener.
my_cb.addEventListener("change", cbListener);

 

aqui funcionou, teste ai pra ver, se funcionar pode ser algo no resto do seu código que esta interferindo

 

 

[]´s

 

Eder, seu exemplo funcionou, mas quando eu importo a classe ComboBox e declaro my_cb, para de funcionar.

 

Adicione as duas linhas abaixo no seu código e veja o que acontece, por favor!

 

import mx.controls.ComboBox;
var my_cb:ComboBox;

Grata.

 

Sds,

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesmo assim funcionou, coloquei essas duas linhas no inicio do código e foi normal

 

não sei se pode ser isso, mas eu uso o Flash CS3, mas estou publicando na versão FlashPlayer 7( do flash MX 2004)

 

pode ser isso ou deve ser outra coisa da sua pagina que esta interferindo

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.