[RESOLVIDO] Ajax OnChange

Boa tarde a todos.

Estou com uma dificuldade aqui com relação a um formulário.

Tenho 4 campos (campo1, campo2, campo3, campo4)

O ‘campo1’ é um campo do tipo SELECT, se eu selecionar o valor “MENSAL”, o campo3 e campo4 devem aparecer. Se eu selecionar qualquer outro valor que não seja “MENSAL”, o campo3 e campo4 devem sumir.

Eis o código como ficou:

/** * Hide/show a field */

if ({campo1} == ‘MENSAL’) // Display field
{
sc_field_display({campo3}, ‘on’);
sc_field_display({campo4}, ‘on’);
}
else // Hide field
{
sc_field_display({campo3}, ‘off’);
sc_field_display({campo4}, ‘off’);
}

Obs: Esse evento OnChange foi criado no ‘campo1’ e os parâmetros para o ‘campo2’.

Obs2: Fiz o teste somente com o ‘campo3’ no código e mesmo assim não deu certo. Ao selecionar qualquer alternativa, sendo MENSAL ou outra, os campos somem.

Onde será que estou errando?

Será que é por que um campo SELECT não é uma string, e sim um INTEIRO por ser uma FK e eu estar passando como parâmetro uma string?

Gabriel,

Qual o real conteúdo do campo {campo1}?

Saudações Kleyber!

Resolvi o problema!

Fiz uma blank com var_dump para testar o que o campo estava realmente recebendo. No lugar de ‘MENSAL’ coloquei o código desse valor que o campo estava lendo.

Ficou assim:

/** * Hide/show a field */

/*[msg] = {fl_tipo_controle_plano};
sc_redir(‘a’);
*/

if ({fl_tipo_controle_plano} == 4 ) // Display field
{
sc_field_display({fl_tipo_controle_valor}, ‘on’);
sc_field_display({num_tipo}, ‘on’);
}
else // Hide field
{
sc_field_display({fl_tipo_controle_valor}, ‘off’);
sc_field_display({num_tipo}, ‘off’);
}

Problema resolvido! Obrigado pela atenção Kleyber!

Que bom que resolveste!

Kleyber aproveitando a oportunidade, surgiu outra dificuldade aqui…

Usando o código com o nome dos campos que eu coloquei ali…

Por exemplo: No Select do campo1, se eu selecionar ‘MENSAL’, quero que o campo2 (Número de vezes) seja auto-completado com o valor ‘1’; Se eu selecionar ‘DIARIO’, auto-completar com ‘3’ e assim por diante. Não consegui pensar em uma forma para resolver isso que não seja por uma aplicação blank.

Tem alguma alternativa?

A princípio eu tentaria o Ajax OnBlur em cima do campo1 e dentro dele faria a atualização do campo1, de acordo com o campo1.

Teria que fazer através de macros?

Gabriel,

O {campo2} é um campo do tipo SELECT?

Olá Kleyber!

Segue a imagem aqui:

http://www.casimages.com.br/i/150713080402819710.png.html

Regra Data Validade {campo2} é Select, {campo3} é numérico. {campo4} é Select e o {campo5} numérico.

Gabriel,

Então é simples: use o próprio evento Ajax do campo, para que o campo2 seja alterado sempre que selecionar algo diferente em campo1.

Obrigado pela atenção novamente Kleyber.

Sou completamente iniciante em programação, então fiz uma lógica aqui em pseudocódigo e tentei passar para o scriptcase no mesmo evento.

Ficou assim:

if ({fl_tipo_controle_plano} == 4) { {nu_vezes} = 1; {num_tipo} = 1; } else if ({fl_tipo_controle_plano} == 6) { {nu_vezes} = 1; {num_tipo} = 1; {fl_tipo_controle_valor} = 6; } else if ({fl_tipo_controle_plano} == 5) { {nu_vezes} = 1; {num_tipo} = 1; {fl_tipo_controle_valor} = 5; } else if ({fl_tipo_controle_plano} == 3) { {nu_vezes} = 1; {num_tipo} = 1; {fl_tipo_controle_valor} = 3; } else if ({fl_tipo_controle_plano} == 1) { {nu_vezes} = 1; {num_tipo} = 1; {fl_tipo_controle_valor} = 1; }

Há alguma outra forma de fazer isso que não seja dessa forma?

Gabriel,

Sim, há. No próprio campo existe a opção de evento ajax (que não é criar um evento ajax em um campo) para você fazer o que deseja. Eu faço muito isto no caso do relacionamento do campo UF com CIDADES, onde quando escolho uma UF no campo SELECT, ele altera a faixa de cidades no campo CIDADE, que também é um select.

Kleyber havia pensado nisso antes porém os campos que eu quero que completem com os valores não são do tipo Select / Checkbox / Duplo Select ou Radio.

Então vai ter que ser mesmo via evento Ajax no campo.

Pois é. De qualquer forma o código ficou meio desorganizado, vou tentar fazer usando um case.

Kleyber muito obrigado pela tua ajuda e pela atenção ao tópico!

Tranquilo.