Evento ajax em campo do tipo select

Bom dia, precisei suspender o desenvolvimento desta aplicação na época e agora estou voltando e estou com este mesmo problema. Vou tentar especificar melhor o que estou precisando.

Eu tenho uma tabela de veiculos:

[table]
[tr]
[td]Código[/td]
[td]Descrição[/td]
[/tr]
[tr]
[td]A[/td]
[td]FIAT[/td]
[/tr]
[tr]
[td]AA[/td]
[td]Palio[/td]
[/tr]
[tr]
[td]AAA[/td]
[td]Palio 1.4[/td]
[/tr]
[tr]
[td]AAB[/td]
[td]Palio 1.0[/td]
[/tr]
[tr]
[td]AB[/td]
[td]UNO[/td]
[/tr]
[tr]
[td]AC[/td]
[td]IDEA[/td]
[/tr]
[tr]
[td]B[/td]
[td]CHEVROLET[/td]
[/tr]
[tr]
[td]BA[/td]
[td]CORSA[/td]
[/tr]
[tr]
[td]BB[/td]
[td]ASTRA[/td]
[/tr]
[tr]
[td]BC[/td]
[td]VECTRA[/td]
[/tr]
[/table]

Terei nesse aplicativo três campos tipo select nessa tabela onde:

O primeiro campo será:
SELECT codigo, descricao
FROM veiculos
WHERE CHAR_LENGTH(codigo) = 1
ORDER BY clpcod;

O segundo campo será:
SELECT codigo, descricao
FROM veiculos
WHERE CHAR_LENGTH(codigo) = 2 AND codigo ILIKE ‘{campo1}%’ AND codigo != ‘{campo1}’
ORDER BY codigo;

E o terceiro campo será:
SELECT codigo, descricao
FROM veiculos
WHERE CHAR_LENGTH(codigo) = 3 AND codigo ILIKE ‘{campo2}%’ AND codigo != ‘{campo2}’
ORDER BY codigo;

OBS: Em cada um desses campos select utilizo a opção de Usar Título/Negação onde o título em todos é igual a SELECIONE e a verificação para fazer com que apareça os campos escondidos está da seguinte forma:

if (empty({campo1}))
{
	sc_field_display({campo2}, off);
	sc_field_display({campo3}, off);
}
else
{
	sc_field_display({campo2}, on);
	sc_field_display({campo3}, off);
}

if (empty({campo2}))
{
	sc_field_display({campo3}, off);
}
else
{
	sc_field_display({campo3}, on);
}

O problema que ocorre é que ao iniciar a aplicação, eu deixo visível apenas o primeiro campo ({campo1}). Ao selecionar o campo 1, deve aparecer todos os dados referente ao selecionado no campo 1. Por ex: Campo 1 está igual a FIAT. No campo 2, deve aparecer Palio, Uno e IDEA. Ao selecionar o campo 2, deve aparecer os dados referentes ao campo 3. Ex: Campo 2 está igual a Palio. No campo 3 deverá aparecer Palio 1.4 e Palio 1.0. Até aí, funciona perfeitamente. O problema está que se o usuário resolver mudar o campo 1 para CHEVROLET, o campo 2 fica como selecione e o campo 3 com o dado dos carros da FIAT (Palio 1.4 e 1.0).

Obrigado

Thyago

Thyago sempre que houver interação com o {campo1} você tem que recarregar o formulário ou os dados pelo menos, visto que as alterações no {campo1} carregam apenas os dados do {campo2}.

Tente habilitar a opção recarregar formulário no campos pra ver se resolve.

Saulo, essa opção está selecionada nos meus campos.
Vou tentar exemplificar o que estou fazendo.

Eu tenho tres campos onde, no início, apenas o primeiro fica visível.
No campo 1 eu tenho as opções FIAT E CHEVROLET. Ao selecionar, por exemplo FIAT, o campo 2 ficará visível e me mostrará as opções PALIO, UNO E IDEA. Ao selecionar PALIO, aparecerão as opções PALIO 1.0 E PALIO 1.4. Até aí funciona legal. O problema é que o usuário resolve que o campo 1 não é mais FIAT e sim CHEVROLET. O campo 2 fica com apenas o option “SELECIONE” e o campo3 fica com os options PALIO 1.0 E PALIO 1.4 onde na verdade este campo deveria estar invisível novamente.

Nos campos, selecionei as opções “Recarregar formulário após alteração do valor” e "Usar Ajax para recarregar outros campos do tipo Select, Duplo Select, Radio e Checkbox. " e “Em usar Título/Negação” está a opção “SIM” e valor negativo definido como 0 (JA TESTEI SEM ESTE VALOR DEFINIDO TAMBÉM). Veja abaixo o if que estou utilizando:

//Estou no evento onRefresh
if ({Campo2} != '0')
{
    sc_field_display({Campo3}, on);
}
else if ({Campo1} != '0')
{
    sc_field_display({Campo2}, on);
}

Um detalhe é que os campos 2 e 3 também por padrão já estão invisíveis.

Obrigado pela sua atenção!!

Thyago

Bom dia galera. Ainda não consegui resolver esse problema.

Alguém sabe o que pode ser?

irmao… eu faço essa recarga com meu cadastro de conta bancária.
entao…vc tem que colocar na recarga se ele selecionar o campo 1 ele recarrega os demais campos.

sempre que escolho uma conta bancaria e depois resolvo mudar de banco ele recarrega os demais…

Ele faz isso. Porém eu tenho 3 campos. Se eu selecionar o primeiro campo, depois o segundo campo e depois o terceiro, funciona beleza. Agora se da na cabeça do usuário mudar o campo 1, teoricamente deveria ficar invisível os outros dois campos certo? Isso que não acontece.

Entendi…
Faz o seguinte…resolva 1 problema por vez…
retire as regras que deixam os campos invisíveis…
faça apenas as recargas…
teste a mudança do primeiro campo para ver se os demais recarregam… funcionando…segue seu projeto e pense nesse caso com tempo.
o que importa é ao mudar o 1º campo os demais recarregarem…
sempre que tenho uma dificuldade e fraciono o problema e acabo achando a solução.

Este teste que você citou já foi feito também, porém deu na mesma.

Seguindo o exemplo acima, no campo 1 eu tenho as opções FIAT E CHEVROLET. Ao selecionar, FIAT, o campo 2 me mostrará as opções PALIO, UNO E IDEA. Ao selecionar PALIO, aparecerão as opções PALIO 1.0 E PALIO 1.4. Até aí funciona legal. O problema é que o usuário resolve que o campo 1 não é mais FIAT e sim CHEVROLET. O campo 2 fica com apenas o option “SELECIONE” e o campo3 fica aparecendo os options PALIO 1.0 E PALIO 1.4 onde na verdade este campo deveria aparecer apenas a option SELECIONE novamente.

Então, ele funciona de cima pra baixo. De baixo pra cima já não dá certo.

OBS: Hoje estou utilizando a versão 5 do sc.

Entao no campo 1 na opção "Usar Ajax para recarregar outros campos do tipo Select, Duplo Select, Radio e Checkbox. " marque tudo que tiver lá dentro… dai os campos vao recarregar…
aqui funciona…

Esta opção já está marcada, tanto que ele faz certo quando eu sigo a forma correta, ou seja, ao selecionar o campo 1, libera as opções do campo 2. Ao selecionar o campo 2, libera as opções do campo 3. Isso dá certo. Agora se eu mudo o campo 1, o 3 continua com as mesmas opções que estavam anteriormente.

Na 1ª tentativa eu tenho:
Campo 1: FIAT, CHEVROLET
Option selecionado: FIAT

Campo 2: PALIO, UNO, IDEA
Option selecionado: PALIO

Campo 3: PALIO 1.4 E PALIO 1.0
Option selecionado: PALIO 1.0

Na 2ª tentativa eu tenho:
Campo 1: FIAT, CHEVROLET
Option selecionado: CHEVROLET

Campo 2: CORSA, ASTRA, VECTRA
Option selecionado: SELECIONE - Aparece essa opção (Título) e as opções citadas acima (Campo 2).

Campo 3: PALIO 1.4 E PALIO 1.0
Option selecionado: PALIO 1.0 - Neste campo continua aparecendo PALIO 1.0 E A OUTRA OPÇÃO PALIO 1.4. AQUI DEVERIA APARECER APENAS A OPÇÃO SELECIONE JÁ QUE NO CAMPO 2 ESTÁ SELECIONADO O OPTION “SELECIONE”.

Olá Thyago,

fiz um teste e aqui funcionou sem problemas. Utilizo do SQL Server 2003 e SC verão 5.02.0039, ambiente Windows.
Configurei tanto campo1 como campo2 conforme nosso colega Jean Matos citou.
Escolho “fiat” no campo1 e campo2 e campo3 acompanham a escolha. Altero campo1 para “chevrolet” e campo2 exibe as opções de acordo e o campo3 obviamente aparece em branco e sem opções pois elas não existem, conforme os dados de exemplo q vc postou.

Mas não utilizei sua rotina “sincronizar”, em que evento vc o utiliza?

att

Akio

Boa tarde Akio, para mostrar os campos eu utilizei no evento OnRefresh já que selecionei a opção para recarregar o campo sempre que houver mudança.

Lembrando que a programação que estou fazendo é essa:

//Estou no evento onRefresh
if ({Campo2} != '0')
{
    sc_field_display({Campo3}, on);
}
else if ({Campo1} != '0')
{
    sc_field_display({Campo2}, on);
}