Tipo de parametros que pode ser passado em função javascript

5 respostas
C

Boa noite galera.

Estou com um probleminha desde ontem.
Tenho uma lista de cartas que eu trago quando chamo minha action, nessa lista eu uso logic:iterate e faço paginação para que apareça uma carta em cada página.
Porém, eu quero ocultar o conteúdo de alguns propertys que eu trago, só deve aparecer quando a pessoa clicar no botão.
O meu grande problema, é que, já consegui fazer aparacer o conteúdo, mas quando eu clico na primeira página, passo para segunda, o conteúdo da segunda carta já está aberto como se a pessoa já tivesse clicado.

Acho que com o código fica mais fácil de entender. rs

Essa é minha função:

function mostrarDica(cont){
	document.getElementById(cont).style.display="block";
	document.getElementById(cont).style.display="none";
}

Esse é meu iterate:

<%! int contador = 1; %>

<logic:iterate id="f" name="form" property="cartas">
	<tr>
		<td><bean:write name="f" property="tema"/></td>
		<td>
			<div id="<%=contador %>" style="display:none;">
				<bean:write name="f" property="dica1"/>
			</div>
			<div id="<%=contador %>">
				<html:button  property="Dica 1" onclick="mostrarDica(PASSAR O CONTADOR AQUI TB);" styleId="formar_conjunto"/>
			</div>
		</td>
	<% contador = contador +1; %>
		<td>
			<div id="<%=contador %>" style="display:none;">
				<bean:write name="f" property="dica2"/>
			</div>
			<div id="<%=contador %>">
				<html:button  property="Dica 2" onclick="mostrarDica(PASSAR O CONTADOR AQUI TB);" styleId="formar_conjunto"/>
			</div>
		</td>
	</tr>
	<% contador = contador +1; %>
</logic:iterate>
Quando eu pego na div
<div id="<%=contador %>" style="display:none;">
dá certo, mas se eu passar como parametro assim
onclick="mostrarDica(<%=contador %>);"
dá erro.

Alguém tem alguma sugestão??

Desde já grata. :)

5 Respostas

A

Primeiro, é preciso dizer que essa função sempre vai esconder o componente.

O getElementById recebe uma string com o id do elemento, logo deveria sempre passar uma string no cont.
(Aliás… utilizar o nome idElement seria um nome melhor pra esse parametro)

Aqui você não está passando a string… (No javascript teria que ser com aspas ou aspas simples).

Ou seja, coloque assim:

onclick="mostrarDica('&lt;%=contador %&gt;');"

Que o erro atual deve parar de dar (talvez mude pra outro).

C

Boa noite Abel.

Bem lembrado, nem me toquei nessa função.
Alterei para o seguinte:

function mostrarDica(idElement){
		document.getElementById(idElement+'mostrar').style.display="block";
		document.getElementById(idElement+'dica').style.display="none";
	}

E no iterate:

<%! int contador = 1; %>

<logic:iterate id="f" name="form" property="cartas">
	<tr>
		<td><bean:write name="f" property="tema"/></td>
		<td>
			<div id="<%=contador %>mostrar" style="display:none;">
				<bean:write name="f" property="dica1"/>
			</div>
			<div id="<%=contador %>dica">
				<html:button  property="Dica 1" onclick="mostrarDica('<%=contador %>');" styleId="formar_conjunto"/>
			</div>
		</td>
	<% contador = contador +1; %>
		<td>
			<div id="<%=contador %>mostrar" style="display:none;">
				<bean:write name="f" property="dica2"/>
			</div>
			<div id="<%=contador %>dica">
				<html:button  property="Dica 2" onclick="mostrarDica('<%=contador %>');" styleId="formar_conjunto"/>
			</div>
		</td>
	</tr>
	<% contador = contador +1; %>
</logic:iterate>

Dae agora está dando o seguinte erro quando eu clico no botão:

Objeto necessário, na segunda linha da função.
Não existe esse tipo de concatenação ali dentro?
Eu preciso para identificar cada botão.

C

Ninguém? Já tentei várias formas, sempre dá essa parada falando de Objeto Esperado.

D

Bom, primeiro, tenha um pouco mais de calma, carol.
Segundo, já viu o que está sendo recebido no lugar de idElement no javascript? Se você usa o chrome ou o IE (> 7)rode o projeto, abra no navegador e pressione F12, irá aparecer um debugger. Se usa firefox, pode instalar o firebug e debugger o javascript por ele.
Se acha que isso fica difícil, coloca um

alert(idElement); como primeira linha da function.

C

Problema resolvido. =)

Eu estava usando uma configuração default, acrescentando isso ( isELIgnored=“false”) deu tudo certo:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false"%>

Valeu pela ajuda.

Criado 30 de setembro de 2011
Ultima resposta 22 de out. de 2011
Respostas 5
Participantes 3