Jump to content
marcelobbt

Desabilitar checkbox

Recommended Posts

Estou criando um sistema de votação onde a pessoa pode escolher um número determinado de respostas, então queria desabilitar as checkbox ao chegar a este valor e voltar a habilitar se a pessoa desmarcar algum campo. Problema que não tenho ideia como fazer isso em javascript.

 

Segue o código abaixo:

 

<h2>Votação</h2>
<div class="row">
	<div class="col-sm-12">
		<h4><?php echo $votacao->__get('titulo'); ?></h4>
		<p>Término em <?php echo $votacao->__get('dataTermino'); ?></p>
		<p><?php echo $erro; ?></p>
		<?php echo form_open($link, array('class'=>"form-horizontal")); ?>
		<?php
			$i = 0;
			foreach ($votacao->__get('opcoes') as $opcao){
				echo '<div class="form-group">
						<label>'.$opcao.'</label>'.
						'<div class="col-sm-1">
						<input class="form-control" type="checkbox"  onkeyup="calcula()" name="opcaoform'.$i.'" id="opcao"/> '.
						'</div></div>';
				$i++;
			}
		?>
		<input type="text" name="total" id="total" value="<?php echo $total; ?>" style="display: none"/>
		<div class="form-group">
			<div class="col-sm-offset-2 col-sm-6">
				<?php echo form_submit(array('name'=>'votar'), 'Votar'); ?>
			</div>
		</div>
	</div>
</div>
<script>
	//recebe valores do PHP
	Function calcula () {
		var numeroEscolhas = "<?php echo $numeroEscolhas; ?>";
		var totalAnterior = document.getElementById('total').value;
		if () {
			//se marcou acrescenta um ao total
			var total = totalAnterior + 1;
		} else {
			//se desmarcou diminui um ao total
			var total = totalAnterior - 1;
		}
		
		if (total == numeroEscolhas) {
			//desabilita checkboxs
			document.getElementById('opcao').disabled;
		} else {
			//habilita checkboxs;
			
		}
	}	
</script>

 

 

Share this post


Link to post
Share on other sites

Obrigado aos que tentaram me ajudar. Encontrei um script antigo e fazendo uma modificações deu certo. Segue o resultado para quem quiser.

 

<script>
(function(){
	"use strict";
 
	var marcados = 0;
	var verifyCheckeds = function($checks) {
		if( marcados>="<?php echo $numeroEscolhas; ?>" ) {
			loop($checks, function($element) {
				$element.disabled = $element.checked ? '' : 'disabled';
			});
		} else {
			loop($checks, function($element) {
				$element.disabled = '';
			});
		}
	};
	var loop = function($elements, cb) {
		var max = $elements.length;
		while(max--) {
			cb($elements[max]);
		}
	}
	var count = function($element) {
		return $element.checked ? marcados + 1 : marcados - 1;
	}
	window.onload = function(){
		var $checks = document.querySelectorAll('input[type="checkbox"]');
		loop($checks, function($element) {
			$element.onclick = function(){
				marcados = count(this);
				verifyCheckeds($checks);
			}
			if($element.checked) marcados = marcados + 1;
		});
		verifyCheckeds($checks);
	}
}());
</script>

 

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

  • Similar Content

    • By thiamatte
      pesquisei muito e não consegui encontrar a solução para o meu problema, alguém poderia me ajudar.
      tenho um BD carro, BD opcionais e um BD (cod_carro e cod_opcional).
      cadastro todos os opcionais e quando vou cadastrar os carros carrega os checkbox vindos do BD e gravo até aí tudo normal e funcionando, o problema é quando eu quero editar o carro, não consigo trazer ticado os opcionais já cadastrados no BD, segue o código:
       
      $Opcional = $conn->query ("SELECT * FROM opcional ORDER BY opcional ASC");
      $CarroOpcional = $conn->query ("SELECT * FROM carro_opcional, opcional WHERE carro_opcional.cod_carro = '$cod_carro' AND carro_opcional.cod_opcional = opcional.cod_opcional");

      $row_CarroOpcional = $CarroOpcional->fetch( PDO::FETCH_ASSOC );
       
      <?
      while ($row_Opcional = $Opcional->fetch(PDO::FETCH_ASSOC)) {
           foreach($row_CarroOpcional as $row => $cod_opcional) {
                if ($cod_opcional === $row_Opcional['cod_opcional']) {
                     $opcional_selecionado = "checked";
                }
           } ?>
      <input name="cod_opcional[]" type="checkbox" id="cod_opcional" value="<? echo $row_Opcional['cod_opcional']; ?>" <? echo $opcional_selecionado; ?>><? echo $row_Opcional['opcional']; ?>
      <? } ?>
       
      Desde já agradeço a ajuda
    • By gust.php
      Prezados, boa noite.
       
      Tenho uma lista com vários registros, quero selecionar alguns registros e enviá-los para serem faturados. Estou tentando assim:
       
      Se eu tirar o $.ajax e colocar um alert(id), ele mostra todos os IDs selecionados, direitinho. Usando o ajax não estou conseguindo chamar minha Action no controller.
       
      Podem ajudar?
      // BOTÃO <input type="submit" value="Faturar Serviço" id="envia" class="btn btn-success pull-right" disabled="true"> // checkBox <th class="text-sm"><input type="checkbox" class="checkbox" name="id" id="id" value="<?php echo $le->getIDSERVICO(); ?>"></th> <script> $(function(){ $("[name='id']").change(function(){ var countSelected = $("input[name='id']:checked").length; var $btnEnviar = $('#envia'); $btnEnviar.prop("disabled", countSelected == 0); $btnEnviar.val('Faturar Serviço' + (countSelected > 1 ? 's' : '')); }); }); $(document).ready(function() { $("#envia").click(function(){ var ids = []; $.each($("input[name='id']:checked"), function(){ ids.push($(this).val()); }); $.ajax({ method: 'POST', url: '/sgt/financeiro/faturaServicosSelecionados', data: { ids: ids } }); }); }); </script>  
       
    • By rxmarti
      Saudações, sou novo no forum, mas não em pesquisas e este tem me ajudado muito em meus estudos, mas esbarrei em um problema e não estou encontrando uma solução que eu entenda seu funcionamento, o problema:
       
      O form que estou desenvolvendo em PHP possuí alguns campos checkbox e através de jvs eu consigo habilitá-los ou não por opção sim ou não (radio + onclick):
      <script>
      function enbl(form)
       {
          form.x_daye[0].disabled = false;
          form.x_daye[1].disabled = false;
          form.x_daye[2].disabled = false;
       }
       function disbl(form)
       {
          form.x_daye[0].disabled = true;
          form.x_daye[1].disabled = true;
          form.x_daye[2].disabled = true;
       }
                          
      </script>";  
      <input type=radio name=v_mandaemail value=NAO onClick=disbl(this.form)>NAO
      <input type=radio name=v_mandaemail value=SIM onClick=enbl(this.form)>SIM
           
      <input type=checkbox id=x_daye name=v_exc_day[] value=arq1>arq1
      <input type=checkbox id=x_daye name=v_exc_day[] value=arq2>arq2
      <input type=checkbox id=x_daye name=v_exc_day[] value=arq3>arq3
      ...
       
      Bom, isso está funcionando, mas se houver mais arquivos(arq*) e esta quantidade for listada em um  "while" , como posso fazer que a mesma função oriente qualquer checkbox listado.
       
      Muito grato
       
      RM
       
       
    • By Rafael Freitas
      Fala galera!
      Estou travado em uma parte do projeto que estou fazendo, quem puder me ajudar, desde já agradeço.
      Seguinte,  eu tenho alguns dados gravados em uma tabela no banco. Eu recupero estes dados exibindo em uma tabela o nome do parametro "p_descricao" e um checkbox do lado, segue abaixo:
      <?php $max = 200; if(!$pagina){ $pagina = 1; } $inicio = $pagina -1; $inicio = $inicio * $max; $consulta = ("SELECT * FROM parametros WHERE p_tipo_analise='MICROBIOLOGICA'"); $p_id = $_GET["p_id"]; $query = mysql_query("$consulta LIMIT $inicio,$max"); $todos = mysql_query($consulta); $total = mysql_num_rows($todos); $tp = $total / $max; $regLinha = 4; $i = ceil($max / $regLinha); $j = 1; $z = 0; echo " <table width=100% class='tabela_parametros_itens' border=1><tr> "; while($x = mysql_fetch_array($query)){ echo "<td> <input type='checkbox' name='parametro' value='" .$x[p_descricao]."' checked> " .$x[p_id]." - " .$x[p_descricao]."</td>"; $z++; if($z == $regLinha and $j < $i){ echo "</tr><tr>"; $z = 0; $j++; } if($z == $regLinha and $j == $i){ echo "</tr>"; } } echo "</table>"; Eu coloquei checked para todos estarem marcados, até aí tudo certo. O que acontece é que quando eu cadastro, ele só grava no banco, o último registro, ou então se eu desmarco todos e deixo somente 1 marcado, aí ele grava certo.
       
      O que eu queria era gravar todos os registros que estiverem marcados com a checkbox e não só 1.
       
      Conto com a ajuda de vocês.
       
      Abraço.
    • By Fábão Ramos
      Boa tarde Pessoal!! estou com um problema que acho que sou o único com este mesmo problema kkkk pois procurei em tudo que foi lugar um esclarecimento de como resolver e nada.
      Bom vamos ao que importa.
      tenho um formulário em metodo post que será auto preenchido depois que eu conseguir aplicar o que tenho a duvida.
       
      <form action="caixa.php" method="post">
      <B>Selecione a Refeição:</B><br>
      <input type=checkbox name="pratos[]" value="Feijão"> Feijão<br>
      <input type=checkbox name="pratos[]" value="Arroz"> Arroz<br>
      <input type=checkbox name="pratos[]" value="Fritas"> Fritas<br>
      <input type=checkbox name="pratos[]" value="Farofa"> Farofa<br>
      <input type=checkbox name="pratos[]" value="Bife"> Bife<br>
      <input type=checkbox name="pratos[]" value="frango"> frango<br>
      <input type=checkbox name="pratos[]" value="ovo"> ovo<br>
      <input type=checkbox name="pratos[]" value="Churrasco"> Churrasco<br><BR>
      <input type=submit>
      </form>
      <?php
      $pratos = isset($_POST['pratos']) ? $_POST['pratos'] : '';    
      if(!$pratos!="Registrar")
      {
      // Verifica se usuário escolheu algum número
      if(isset($_POST["pratos"]))
      {
         foreach($_POST["pratos"] as $complemento)
          {
              echo "- " . $complemento . "<BR>";
          }
          
      }
      else
      {
          echo "Você não escolheu Seu Prato ainda!<br>";
      }}
      ?>
      esta meio zuado pq sou bem novato mais esta funcionando o resultado do "checkbox" esta vindo só que separadamente preciso unir os dados pois a aplicação dele será imput em sql server para que os pedidos ja saiam no monitor dentro da cozinha com as opções escolhidas sei que não é muito difícil colocar " $complemento[0].$complemento[1].$complemento[2] etc.. pelo que vi seria mais ou menos assim que eu agruparia o valor mais existe um problema o Form será auto preenchido por uma busca em sql server pois existe feijão preto feijão branco feijão mulatinho etc... e ter que preencher isso tudo sem nem ao menos saber se vai ter este prato no dia é bem inviável e a qtd de linhas será absurda então preciso agrupar o resultado para aplicar o envio do mesmo para o sql server indiferente das opções escolhidas se puderem me ajudar agradeço.
       
      este é o mesmo arquivo esta mostrando o resultado onde cadastra só para ficar mais rápido o desenvolvimento caixa.php
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.