Jump to content
ivobarbosa

Função javascript Checkbox

Recommended Posts

ivobarbosa

Boa noite amigos, estou a fazer uma função javascript com um formulário simples com checkboxes, mas estou a fazer algo errado pois não esta a funcionar muito bem.

Tenho 24 checkbox's.

A minha função é:

function SelecionaAnteriores(){
if (document.getElementById("CartaoP2").checked){
	document.getElementById("CartaoP1").checked = true;

}else if (document.getElementById("CartaoP3").checked){
	for (i=1;i<=2;i++){var NomeCartao = 'CartaoP'+i;
		document.getElementById(NomeCartao).checked = true;}
}

O que pretendo fazer o seguinte ao selecionar a checkbox cujo o id é  "CartaoP2" ele que ponha o visto na anterior que será "CartaoP1" e assim sucessivamente em todas as checkbox, quando é um form de insert, isto funciona a primeira vez, por exemplo se selecionar a checkbox "CartaoP3" ele seleciona as anteriores do meu cliclo for, mas se tirar a seleção de uma delas e clicar novamente, já não ira funcionar ate fazer refresh à pagína, alguem me pode ajudar ou dar uma dica de como fazer isto da melhor maneira, é que só encontrei esta forma de o fazer e mesmo assim não funciona correctamente, é chato também porque irei ter que fazer 24 ifs, uma para cada checkbox.

Obrigado

ps. esqueci-me de dizer que em cada checkbox, chamo a função assim 'onclick="SelecionaAnteriores();"'


Melhores Cumprimentos,

Ivo Barbosa

Share this post


Link to post
Share on other sites
simonoop

Qualquer coisa como isto?

<script type="text/javascript">
    function SelecionaAnteriores(obj)
    {
        for(var i = 0; i < document.frm.elements.length; i++)
        {
            if(document.frm.elements[i].type=='checkbox' & document.frm.elements[i].id<obj.id){
                document.frm.elements[i].checked = obj.checked;
            }
        }
    }
</script>

<form name="frm">
    <p><input type="checkbox" name="CartaoP1" id="CartaoP1" onclick="SelecionaAnteriores(this);"><label for="CartaoP1">CartaoP1</label></p>
    <p><input type="checkbox" name="CartaoP2" id="CartaoP2" onclick="SelecionaAnteriores(this);"><label for="CartaoP2">CartaoP2</label></p>
    <p><input type="checkbox" name="CartaoP3" id="CartaoP3" onclick="SelecionaAnteriores(this);"><label for="CartaoP3">CartaoP3</label></p>
    <p><input type="checkbox" name="CartaoP4" id="CartaoP4" onclick="SelecionaAnteriores(this);"><label for="CartaoP4">CartaoP4</label></p>
</form>

Share this post


Link to post
Share on other sites
ivobarbosa

Boas amigo simonoop, seria qualquer coisa como isso com uns pequenos ajustes.

tentei adaptar mas tenho um erro, vê se percebes a lógica.

<script type="text/javascript">
    function SelecionaAnteriores(obj, NomeForm)
    {
        for(var i = 0; i < document.NomeForm.elements.length; i++)
       {
           if(document.NomeForm.elements[i].type=='checkbox' & document.NomeForm.elements[i].id<obj.id){
               document.NomeForm.elements[i].checked = obj.checked;
           }
       }
   }
</script>
<form name="frm">
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP1" onclick="SelecionaAnteriores(this,'frm');"><label for="CartaoP1">CartaoP1</label></p>
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP2" onclick="SelecionaAnteriores(this,'frm');"><label for="CartaoP2">CartaoP2</label></p>
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP3" onclick="SelecionaAnteriores(this,'frm');"><label for="CartaoP3">CartaoP3</label></p>
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP4" onclick="SelecionaAnteriores(this,'frm');"><label for="CartaoP4">CartaoP4</label></p>
</form>

O nome da form tem que vir nos parâmetros da função porque a função irá servir para varias forms com nomes diferentes.

e os nomes dos checkbox irá ser sempre um Array 'CartaoP[]'.

Dentro do ciclo for não posso dizer que o nome da form vem dos parâmetros? Pelo erro que dá vejo que a função não esta a assumir o nome da form vindo dos parâmetros da função, então diz que é nulo ou não é um objecto....


Melhores Cumprimentos,

Ivo Barbosa

Share this post


Link to post
Share on other sites
simonoop

Basta passar o objecto form e não apenas o nome da form na SelecionaAnteriores() e usar esse objecto em vez de document.blahblah.

<script type="text/javascript">
    function SelecionaAnteriores(obj, NomeForm)
    {
        for(var i = 0; i < NomeForm.elements.length; i++)
       {
           if(NomeForm.elements[i].type=='checkbox' & NomeForm.elements[i].id<obj.id){
               NomeForm.elements[i].checked = obj.checked;
           }
       }
   }
</script>
<form name="frm">
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP1" onclick="SelecionaAnteriores(this,document.frm);"><label for="CartaoP1">CartaoP1</label></p>
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP2" onclick="SelecionaAnteriores(this,document.frm);"><label for="CartaoP2">CartaoP2</label></p>
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP3" onclick="SelecionaAnteriores(this,document.frm);"><label for="CartaoP3">CartaoP3</label></p>
    <p><input type="checkbox" name="CartaoP[]" id="CartaoP4" onclick="SelecionaAnteriores(this,document.frm);"><label for="CartaoP4">CartaoP4</label></p>
</form>

Podia-se deixar como estava e obter dinamicamente o objecto form. Com eval, por exemplo.

Share this post


Link to post
Share on other sites
ivobarbosa

Podia-se deixar como estava e obter dinamicamente o objecto form. Com eval, por exemplo.

isso não estou a ver como se faz, e em relação de como resolveste, foi simples, não me lembrei de fazer isso lol obrigado pela dica :P


Melhores Cumprimentos,

Ivo Barbosa

Share this post


Link to post
Share on other sites
ivobarbosa

isso não estou a ver como se faz, e em relação de como resolveste, foi simples, não me lembrei de fazer isso lol obrigado pela dica :P

Outra coisa que me deparei agora ao testar é o seguinte eu tenho 24 checkbox e da 1ª ate ao 9º o value de cada uma é de "1" a "9", a partir do 10ª checkbox uso letras no value, de "a" a "o" e o que acontece é que a função destinge isso, ou seja se colocar o visto numa delas ate 9 só selecciona ate 9, e na outra metade, só selecciona se escolher um valor superior a 9, fiz-me entender?

A função esta a buscar o id ao value?


Melhores Cumprimentos,

Ivo Barbosa

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.