[GSP] JavaScript não oculta quando uso <g:each>
04/01/2012 17:45
0
Olá pessoal,

Estou usando javascript na GSP para mostrar/ocultar uma DIV.

Mas quando coloco dentro da DIV uma consulta que mostraria os grupos do BD, não está ocultando e sim mostrando os checkbox dos grupos da consulta que fiz no BD

GSP:

<script type="text/javascript">
function exibe(id) {
if(document.getElementById(id).style.display=="none") {
document.getElementById(id).style.display = "inline";
}
else {
document.getElementById(id).style.display = "none";
}
}
</script>


<a href="#" onclick="javascript: exibe('conteudo');">Exibe/oculta a DIV</a><br />
<br />
<div id="conteudo" style="display: none;">

<g:each in="${testeInstanceList}" status="i" var="testando">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

<div id="teste">
<label for="${testando.groupname?.encodeAsHTML()}">
<g:message code="${testando.groupname?.encodeAsHTML()}" default="${testando.groupname?.encodeAsHTML()}" />
<span class="required-indicator">*</span>
</label>
<g:checkBox name="check" value="${testando.id}" checked="${false}" />
</div>

</tr>
</g:each>

</div>



Se eu faço um teste simples, funciona:

<a href="#" onclick="javascript: exibe('conteudo');">Exibe/oculta a DIV</a><br />
<br />
<div id="conteudo" style="display: none;">

Seu conteúdo aqui...
</div>





Alguém poderia ajudar, porque não oculta quando uso <g:each> dentro da DIV ?

Obrigado
Tags: JavaScript não oculta


0
Oi Igor,

alguns pontos:

1. O id de um elemento HTML tem de ser unico. Repare que no seu g:each, você está incluindo o mesmo id para todas as divs: "teste"

2. No evento onclick, não precisa preceder o seu script com javascript: Se fizer como o exemplo abaixo também rola:


onclick="executeAlgo()"


Dica: ative as ferramentas de desenvolvedor do seu browser (ou instale o Firebug) e dê uma olhada no console Javascript. Com certeza não está encontrando a div que você quer ocultar/expor.


0
Olá Henrique,

Eu coloquei da seguinte forma:


<a href="#" onclick="exibe('1');">Exibe/oculta a DIV</a><br />
<br />

<g:each in="${testeInstanceList}" status="i" var="colab">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
<div id="${colab.id}" style="display: none;">

<label for="${colab.groupname?.encodeAsHTML()}">
<g:message code="${colab.groupname?.encodeAsHTML()}" default="${colab.groupname?.encodeAsHTML()}" />
<span class="required-indicator">*</span>
</label>
<g:checkBox name="teste" value="${colab.id}" checked="${false}" />
</div>

</tr>
</g:each>





Desse jeito oculta, mas só traz o primeiro registro da tabela, porque estou passando '1' fixo para a função do javascript

Porque eu não sei se posso e como que faz para passar váriavel ao invés de fixo aqui:
<a href="#" onclick="exibe('1');">Exibe/oculta a DIV</a><br />


Como ve, estou passando fixo '1'

É possível passar variavel de parametro? Saberia como fazer?

Passando variavel, será que vai trazer todos os registros?

Obrigado,
04/01/2012 19:00


1
Oi Igor, sim, é possível.

Basta que você faça da seguinte maneira:


<g:each in="${lista_qualquer}" var="variavel">
<a href="#" onclick="executeMeuJavascriptAssim('${variavel}')">Execute</a>
</g:each>


0
Henrique,

Como eu tenho 5 registros no BD(são 5 grupos), dessa forma que você falou, mostra os 5:

Exibe/oculta a DIV
Exibe/oculta a DIV
Exibe/oculta a DIV
Exibe/oculta a DIV
Exibe/oculta a DIV

Se eu faço assim:

<a href="#" onclick="exibe('mostrar');">Exibe/oculta a DIV</a><br />

<g:each in="${testeInstanceList}" status="i" var="grupos">


<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

<div id="mostrar" style="display: none;">
<label for="${grupos.groupname?.encodeAsHTML()}">
<g:message code="${grupos.groupname?.encodeAsHTML()}" default="${grupos.groupname?.encodeAsHTML()}" />
</label>
<g:checkBox name="confluence" value="${grupos.id}" checked="${false}" />
</div>

</tr>
</g:each>




Mostra somente o primeiro grupo:
Exibe/oculta a DIV
administrators

Porque não traz todos os grupos?

Saberia como me ajudar usando o <g:each> com o javascript para ocultar/mostrar a div?

Obrigado


05/01/2012 10:48


0
Oi Igor,

neste caso é muito mais uma questão do model que você está enviando para a view. Se você está interando apenas em cima da lista testeInstanceList, é sinal de que o seu controlador não está enviando a lista completa pra você.


0
Oi Henrique,

O model está enviando a lista completa, está mandando os 5 grupos:

administrators
users
all-dbas
operacional
diretoria

Se na view eu não uso o javascript para ocultar, ele me mostra os 5 grupos na gsp.

Agora se eu uso, só mostra um grupo.

Colocando dessa maneira, ele não oculta:
<div style="display: none;" id="mostrar">
<g:each in="${testeInstanceList}" status="i" var="grupos">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

<label for="${grupos.groupname?.encodeAsHTML()}">
<g:message code="${grupos.groupname?.encodeAsHTML()}" default="${grupos.groupname?.encodeAsHTML()}" />
</label>
<g:checkBox name="confluence" value="${grupos.id}" checked="${false}" />

</tr>
</g:each>

</div>

05/01/2012 11:10



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto