2009/12/16 <
ad...@cakephp.com.br>:
> Usando jQuery no meu cadastro, pra ocultar/mostrar campos se cliente for
> fisico ou juridico
>
>
> no add.ctp
>
> <script type="text/javascript">
> $(document).ready(function(){
> $("#fisico").hide();
> $("#juridico").hide();
> });
> </script>
>
>
> <div id="myform">
> <h3>Cadastre-se</h3>
>
> <form>
> <input onclick="javascript: $('#fisico').show('slow');
> $('#juridico').hide('slow');" type="radio" name="subscribe" value="1" />
Claramente você está confundindo o _pseudoprotocolo_ `javascript:'
nesse atributo `onclick'.
Existem pessoas que criam links como:
<a href="javascript:window.alert('oi');">clique aqui</a>
O que não é recomendado por mais de um motivo.
Mas o valor de um atributo `onclick' é utilizado para criar uma
função, que por sua vez é atribuída ao identificador `onclick' do
elemento em questão. Algo como:
elementoInput.onclick = new Function( event,
elementoInput.getAttribute('onclick') );
O que geraria uma função similar a:
function onclick(event)
{
javascript: $('#fisico').show('slow'); $('#juridico').hide('slow');
}
Como o ECMAScript e suas implementações suportam algo chamado
"Labelled Statements", que comumente é usado para `goto' em outras
linguagens, mas no nosso caso para labelled break e continue; a sua
função é executada sem erro algum, independentemente do engano.
Achei que valia a explicação :)
Bottom line: pode tirar o `javascript:' do seu código.
> <label>Fisico</label>
> <br />
>
> <input onclick="javacript: $('#juridico').show('slow');
> $('#fisico').hide('slow');" type="radio" name="subscribe" value="0" />
> <label>Juridico</label>
> <br />
>
> <div id="email">
> <label>CPF: </label>
> <input type="text" name="cpf">
> </div>
>
> <div id="email2">
> <label>CNPJ: </label>
> <input type="text" name="cnpj">
> </div>
> </form>
> </div>
De qualquer forma, aqui vai a minha solução simplificada para essa
função. Vejam que manipulando *uma* propriedade de *um* elemento - o
className do form -, tem como reproduzir essa funcionalidade.
Obviamente que se você quiser usar efeitos de transição vai precisar
de algo um pouco mais elaborado, mas também não seria algo que precise
de uma lib inteira.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"
http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript">
window.onload = function(){
var f = document.getElementById('myform');
if(f)
{
f.className = 'js';
}
f = null;
};
function setFisico()
{
var f = document.getElementById('myform');
f.className = 'fisico';
f = null;
}
function setJuridico()
{
var f = document.getElementById('myform');
f.className = 'juridico';
f = null;
}
</script>
<style type="text/css" rel="stylesheet">
.js div
{
display: none;
}
.juridico #fisico
{
display: none;
}
.fisico #juridico
{
display: none;
}
</style>
</head>
<body>
<div id="myform">
<h3>Cadastre-se</h3>
<form>
<input onclick="setFisico()" type="radio"
name="subscribe" value="1" />
<label>Fisico</label>
<br />
<input onclick="setJuridico()" type="radio"
name="subscribe" value="0" />
<label>Juridico</label>
<br />
<div id="fisico">
<label>CPF: </label>
<input type="text" name="cpf">
</div>
<div id="juridico">
<label>CNPJ: </label>
<input type="text" name="cnpj">
</div>
</form>
</div>
</body>
</html>
PS: desculpem-me por sair um pouco do assunto do grupo
--
Gabriel Gilini
www.usosim.com.br
gab...@usosim.com.br