Pegar valor via JavaScript do h:selectOneRadio

7 respostas
brunomathidios

Olá turma, joia?

Estou tendo problemas no meu trecho de código aqui.
Preciso pegar o valor selecionado do meu h:selectOneRadio, verificar se um atributo do meu objeto selecionado é valido e se for valido preciso mostrar uma div na tela.
Segue aqui o código do meu h:selectOneRadio

<h:form id=“formRadio11” styleClass=“radio_pgmt”>

<a4j:outputPanel layout=“block” id=“radio1”>

<h:selectOneRadio value="#{pagamentoBean.formaPag}" layout=“pageDirection” id=“radio11” onmousedown=“limparLista2(), mostrarInputTroco()”>

<s:selectItems value="#{pagamentoBean.listaTradicional}" var="_forma" label="#{_forma.nome}"/>

<a4j:support event=“onclick” reRender=“radio1, inputTroco, scriptTroco”/>

<s:convertEntity/>

</h:selectOneRadio>

</a4j:outputPanel>

</h:form>

E meu código javascript:

<a4j:outputPanel id=“scriptTroco”>

</a4j:outputPanel>

Tive que colocar meu javascript em um painel e dar um reRender nele para pegar o valor atualizado do meu servidor.
Se existir uma possibilidade de não usar o reRender aceito também, pois quero evitar ele para diminuir o processamento no lado do cliente.
Se alguem puder me ajudar, ficarei grato.

7 Respostas

jaboot

Olá Bruno,

Cara, tem certeza de que isso funciona?var aux = document.getElementById('formRadio11:radio11').children[0].children.length; ? Precisa mesmo colocar o form que ele está? O id deve ser único para cada elemento html na página. Até dá pra colocar mais de um id, mas é errado.

Eu acho que você deve tentar algo como document.getElementById(‘elemento’).value. Tenta dar uma alert nisso e mostra o resultado pra gente.

brunomathidios

Eu mudei meu código

function mostrarInputTroco(){

if(#{pagamentoBean.formaPag != null}){

var radio = document.getElementById(radio11).value;

if(radio == Dinheiro){

document.getElementById(divTroco).style.display=block;

} else {

document.getElementById(divTroco).style.display=none;

}

}

}

mas mesmo assim ele não está mostrando a div que quero mostrar. obrigado pela ajuda.

jaboot

Vamos lá Bruno,

Qual browser você está rodando isso? Recomendo demais você instalar o Firefox/Chrome e instalar o firebug (o Chrome tem esse tipo de ferramenta nativa).

Não está mostrando a div porque provavelmente tem algum erro. Manda um alert nesse seu valor:alert("valor: " + radio); Se nem uma mensagem de alerta ele fizer, tem algo errado ANTES disso.

Depois a gente vê a div, não é difícil fazer ela aparecer/desaparecer.

PS: você conhece JQuery?!

brunomathidios

Caro Jaboot, joia?

Eu estou utilizando este script dentro de um painel que renderizo toda vez que meu radio troca de valor:

<a4j:outputPanel id=“panelScriptTroco”>

</a4j:outputPanel>

O resultado no console do Firebug do Mozilla é:

E na parte de cima desta resposta, obtenho essa informação em vermelho gerada pelo Firebug:

Dinheiro is not defined
[Break On This Error] var radio = Dinheiro;

Vou continuar fazendo testes, se vc puder ajudar.
Lembro de que se eu quiser receber um valor String através do JavaScript preciso passar a String do meu Bean com barra antes ("") para ele entender que é uma String.
Também vou dar uma pesquisada nisso pra ver se estou correto.
Aguardo seu retorno e grato desde já.

Polverini

quando for postar seu código use

[code ] e [/ code]

jaboot

brunomathidios:
Dinheiro is not defined
[Break On This Error] var radio = Dinheiro;
Acho que você já deve ter resolvido, mas aí vai: o Dinheiro está sem as aspas (é uma String!)

brunomathidios
Descobri pq não estava funcionando esta função

A descrição Dinheiro que estava comparando estava vindo com um espaço antes da string, assim: " Dinheiro";

Como no IE o javascript .trim() não é suportado, tive que usar esse trecho .innerHTML.replace(/^\s+|\s+$/g, ‘’)

E funcionou!

Obrigado pela atenção e ajuda.
Criado 20 de outubro de 2011
Ultima resposta 21 de out. de 2011
Respostas 7
Participantes 3