Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hesmarjassi

Checkbox Marcar/Desmarcar todos

Recommended Posts

Tenho uma pagina chamado intervalo.php, nela tenho essa função Javascript:

<script language="javascript" type="text/javascript">
         
		function marcardesmarcar(){
		$('.marcar').each(
         function(){
           if ($(this).prop( "checked")) 
           $(this).prop("checked", false);
           else $(this).prop("checked", true);               
          }
        );
       }

</script>

Logo abaixo tenho o php e no meu código Php tenho um checkbox para marcar/desmarcar todos:

echo "<td>";
						
      echo "<span id='checar'>Marcar todos</span><input type=checkbox name='MarcaTodos' onClick='marcardesmarcar();'/>";
							
echo "</td>";

Depois dentro de um While tenho a linha que mostra o checkbox que teria q ser marcado ou desmarcado de acordo com o de cima, o While funciona correto, o problema é que quando eu seleciono o marcar todos ele não marcar nos demais, abaixo o código do que deveria ficar selecionado:

echo "<input type='checkbox'";

Pq ele não Marca ou desmarca conforme solicitado??

Compartilhar este post


Link para o post
Compartilhar em outros sites

O elemento checkbox está mal formado.

de qualquer forma.

Ele precisa ter a classe 'marcar'

Ex:

echo "<input type='checkbox' name=''" id='' class='marcar'/>";

Da uma estudada em DOM/Seletores/, ajuda bastante.

 

Tem esse link super bacana:

http://try.jquery.com/

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se quer dizer que ele está mal formatado porque não fechei o imput, é q na verdade o código todo do imput é esse:

echo "<input type='checkbox' name='teste1' id='teste2' class='marcar'";if ($rst[6]) {echo " checked ";}echo "name='$id' OnClick=load('DIV$id','server/php/bloquear.php','patio=$patio&dia=$atual&check=$id&horario=$hora'+'') />";

O if funciona corretamente, quando o checkbox está marcardo ou 'checked' ele faz o bloqueio necessário, o meu problema é que não consigo marcar todos de uma vez, como pode ver coloquei name, id e class e mesmo assim nada, será q ele não acha a class, tem algo q precise fazer além da função javascript?

 

 

Pessoal na verdade o q acredito q esteja acontecendo é q ele não acha a função nesse ponto aqui:

echo "<td>";						 echo "<span id='checar'>Marcar/Desmarcar todos</span><input type='checkbox' name='todos' id='todos' value='todos'  class='marcar' OnClick='marcardesmarcar();' /> ";echo "</td>";

Ele não acha a função marcardesmarcar, alguém sabe porque ou como faço um teste pra verificar se ele acha a função ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, nesse link tenho um exemplo que funciona, fora do ambiente, mas na minha página não funciona, tentei várias coisas, segue link para análise, se alguém tiver alguma luz ??

http://jsfiddle.net/shzlot/tjwxdkdq/embedded/js%2Chtml%2Cresult/

 

Aqui o código

<script language="javascript" type="text/javascript">
		
		$('#selectAll').click(function(){
			if ($(this).prop("checked")) {
				$('#checar').text('Desmarcar todos');
				$('.marcar').prop("checked", true); 
			}
			else{
				$('#checar').text('Marcar todos');
				$('.marcar').prop("checked", false);
			}
		});
		
	</script>
		
<?php
        
		ini_set("display_errors", 1);
		ini_set("log_errors", 1);
		ini_set("error_reporting", E_ALL);
		
		header("Content-Type: text/html; charset=ISO-8859-1",true);
        
		$patio = $_GET['patio'];

		$dia   = $_GET['dia'];

		//$motivo     = $_GET['motivo'];

		$HoraInicio = $_GET['horainicial'];

		$HoraFinal  = $_GET['horafinal'];

		$motivo = $_GET['motivo'];

		$dia = explode("/",$dia);

		$dd = $dia[0];

		$mm = $dia[1];

		$aaaa = $dia[2];

		$iHInicial = str_replace(":","",$HoraInicio);

		$iHFinal   = str_replace(":","",$HoraFinal);

		

		session_start('login');

		$_SESSION['motivo'] = $motivo;

		

		$sql ="SELECT * FROM agendamento_janelas J LEFT JOIN (

				SELECT * FROM agendamento_hora_bloqueada

				WHERE patio='P$patio' and dia_ref=$dd and mes_ref=$mm and ano_ref=$aaaa

				) AS H ON J.horario = H.hora

				WHERE J.patio='P$patio'

				AND J.horario >= '$HoraInicio' AND J.horario <= '$HoraFinal'

		";

		echo "<div class='cab'>Patio $patio $HoraInicio-$HoraFinal</div>";

		echo "<div class='menu' id='menu'>";	



		if ((int)($iHInicial) <= (int)($iHFinal)){

			if ($motivo <> ""){			

				$cn = mysql_connect('localhost','root','root') or die('Erro: ' . mysql_error());

				$db = mysql_select_db('ormec',$cn);

						

				$qry = mysql_query( $sql );

				$cont = 0;

				$atual = $dia[0]."/".$dia[1]."/".$dia[2];
				
				echo "<table class='comBordaSimples'>";
				
				
				//mostrar o checkbox marcar todos
				
				echo "<td>";
				
			          //echo "<span id='checar'>Marcar todos</span><input type='checkbox' name='todos' id='todos' value='todos'  class='marcar' id='selectAll' ;' /> ";
					  echo "<span id='checar'>Marcar todos</span><input type='checkbox' name='MarcaTodos' id='selectAll' ;'/> ";
                                          
				echo "</td>";
				
				echo "<td>";
				echo "</td>";
				
				echo "<td>";
				echo "</td>";
				
				//fim mostra checkbox marcar todos

				while( $rst = mysql_fetch_array($qry) ){

					$id = "CB".$cont;

					$hora = $rst['horario'];

					

					if (!$rst[5]) {

						$sqlInclusao = "INSERT INTO agendamento_hora_bloqueada VALUES('$dd','$mm','$aaaa','P$patio','$hora','0')";

						$qryInclusao = mysql_query( $sqlInclusao );

						$sqlHistorico = "INSERT INTO agendamento_bloqueio_hist VALUES('$dd','$mm','$aaaa','P$patio','$hora','$motivo','B',0) ";

						$qryHistorico = mysql_query( $sqlHistorico );

					}

					

					echo "<tr>";

						echo "<td>";

							echo $atual;

						echo "</td>";

						echo "<td>";

							echo $rst['horario']."<br>";

						echo "</td>";
						
						
						//teste começa aqui
						
						echo "<td>";
						
						echo "<input type='checkbox' name='teste1' id='teste2' class='marcar'";

						if ($rst[6]) {echo " checked ";}

						echo "name='$id' OnClick=load('DIV$id','server/php/bloquear.php','patio=$patio&dia=$atual&check=$id&horario=$hora'+'') />";

					    echo "</td>";
                         
						// teste termina aqui
						
                        /*						
						echo "<td>";

							echo "<input type='checkbox' checked name='$id' OnClick=load('DIV$id','server/php/bloquear.php','patio=$patio&dia=$atual&check=$id&horario=$hora'+'') />";
                            
						echo "</td>";
						
						*/

						echo "<th>";
						
								echo "<div class='' id='DIV$id'>";

									if ($rst[6]) {echo "<div class='Bloqueado'>Bloqueado</div>";}

									else         {echo "<div class='Aberto'>Aberto</div>";}

								echo "</div>";				

						echo "</th>";

					echo "<tr>";

					$cont++;

				}

				echo "</table>";

			}

			else{

				echo "Motivo Invalido.";

			}

		}

		else{

			echo "Horario Inicial Maior que o Final!";

		}



		echo "</div>";

		

?>

Alguma idéia ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara tem varias coisas que podem ser neste caso.


Mas meu palpite inicial é:

Você adicionou o Jquery?


<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

O que seu log/depurador de script fala?

Ex: abre o Google Chrome você aperta F12 e vá em na aba 'Console'.

Apresenta algum erro? e ao clicar no botão da ação 'selectAll' apresenta algum erro?


Outra coisa é sempre bom forçar o Jquery ativar apenas depois do carregamento, ex:




<script language="javascript" type="text/javascript">
$( document ).ready(function() {
$('#selectAll').click(function(){
if ($(this).prop("checked")) {
$('#checar').text('Desmarcar todos');
$('.marcar').prop("checked", true);
}
else{
$('#checar').text('Marcar todos');
$('.marcar').prop("checked", false);
}
});
});
</script>


Pois essa linha :

'$( document ).ready(function() {'


garante ele só executar o script após o carregamento da pagina.



Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, se eu adicionar o jquery como vc falou minha página nem carrega, então adicionei assim, veja meu Html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html>

	<head>

		<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />	

		<script type='text/javascript' rel='stylesheet' src='o.js'></script>
		
		<script type='text/javascript' rel='stylesheet' src='function-selecionar.js'></script>
		
		<script language='javascript' type='text/javascript' src='function-selecionar.js'></script>
		
		<script type='text/javascript' src="jquery-1.11.2.min.js"></script>
		
		<script src="jquery-2.2.0.min.js" defer></script>

 	</head>

	<body>	

		<div class='centralizar'>

		<div class='cab'>Bloquear Horario da Baia</div>

		<div class='menu' id='menu'></div>

		<div class='main' id='main'></div>

		</div>

	</body>

</html>

Eu fiz como falou pra forçar o Jquery e o console não apresenta nenhum erro, contudo infelizmente nada de carregar ?? Tá complicado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retira essa duplicação deixando apenas 1. (2 podem dar conflito)

<script type='text/javascript' src="jquery-1.11.2.min.js"></script>
 <script src="jquery-2.2.0.min.js" defer></script>

E vai debugando com calma, exemplo:

Teste - 1

$( document ).ready(function() {
	alert(1);
	//Se der o alert aqui significa q o Jquery esta ok.
});

Teste 2

$( document ).ready(function() {
	$('#selectAll').click(function(){
		alert(1);
		//significa q o selector está correto ao efetuar o 'click'
		
	});
});

e assim por diante

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

Pelo console do Chrome descobri algumas coisas, a primeira é que ele não consegue carregar isso:

<script src="https://code.jquery.com/jquery-1.11.3.js"></script>

A mensagem é: Uncaught ReferenceError: load is not defined

 

Baixei a biblioteca jquery-1.11.3.js e alterei o html pra ficar assim:

<script type='text/javascript' rel='stylesheet' src='jquery-1.11.3.js'></script>

Só que mesmo assim continua dando a mesma mensagem, não tinha q carregar já q baixei o arquivo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Destas duas instruções:

<script type='text/javascript' rel='stylesheet' src='function-selecionar.js'></script>
<script language='javascript' type='text/javascript' src='function-selecionar.js'></script>

Deixa ficar apenas a segunda.

 

Outra questão: se algum dos scripts que carregas antes do jQuery (o.js e function-selecionar.js) contiverem elementos de jQuery, então tens de alterar a ordem de referência dos ficheiros no HTML, ficando assim:

<script type='text/javascript' rel='stylesheet' src='jquery-1.11.3.js'></script>
<script type='text/javascript' rel='stylesheet' src='function-selecionar.js'></script>
<script language='javascript' type='text/javascript' src='function-selecionar.js'></script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continuamos tentando, rssrs. Wootzor obrigado pela dica, fiz o teste deixando o html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html>

	<head>

		<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />	
		
		<script type='text/javascript' rel='stylesheet' src='jquery-1.11.3.js'></script>

		<script type='text/javascript' rel='stylesheet' src='o.js'></script>
		
		
		
 	</head>

	<body>	

		<div class='centralizar'>

		<div class='cab'>Bloquear Horario da Baia</div>

		<div class='menu' id='menu'></div>

		<div class='main' id='main'></div>

		</div>

	</body>

</html>

Persiste o erro: Uncaught ReferenceError: load is not defined

assim:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que isso tá errado mas não sei se o erro é por causa disso

 

rel='stylesheet'

 

Isso é pra quando tá importando css e não javascript

 

<script type='text/javascript' src='jquery-1.11.3.js'></script>

<script type='text/javascript' src='o.js'></script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

andrealoisio obrigado pela ajuda, tá complicado mas acredito q uma hora vai funcionar, mas com a sua ajuda consegui fazer alguns testes.

Por exemplo, descobri que o meu código dá erro independente de ter ou não a linha abaixo:

<script type='text/javascript' src='jquery-1.11.3.js'></script>

O que me faz crer que o problema é no arquivo o.js que por algum motivo dá o erro.

Mas acredito então que esse não é o problema do meu objetivo que é fazer o checkboxpai marcar os demais, o que não acontece, na minha função javascript eu coloquei o alert assim:

	<script language="javascript" type="text/javascript">
		
	$( document ).ready(function() {
	    alert(1);
		$('#selectAll').click(function(){
			if ($(this).prop("checked")) {
				$('#checar').text('Desmarcar todos');
				$('.marcar').prop("checked", true); 
			}
			else{
				$('#checar').text('Marcar todos');
				$('.marcar').prop("checked", false);
			}
		});
	});
		
	</script>

Minha pergunta é : O Alert deveria aparecer no console pra eu verificar se o jquery está ok ?

No internet explorer não aparece nada

No chrome não consigo verificar pq dá aquele erro de :

 

Uncaught ReferenceError: load is not defined

 

Segue abaixo o que faço pra tentar fazer funcionar

Checkbox pai

echo "<span id='checar'>Marcar todos</span><input type='checkbox' name='MarcaTodos' id='selectAll' ;'/> ";

Checkbox filho

echo "<input type='checkbox' name='teste1' id='teste2' class='marcar'";

Função Javascript

	<script language="javascript" type="text/javascript">
		
	$( document ).ready(function() {
	    alert(1);
		$('#selectAll').click(function(){
			if ($(this).prop("checked")) {
				$('#checar').text('Desmarcar todos');
				$('.marcar').prop("checked", true); 
			}
			else{
				$('#checar').text('Marcar todos');
				$('.marcar').prop("checked", false);
			}
		});
	});
		
	</script>

Tudo fica dentro de uma única página chamada intervalo.php

 

Será q não está carregando o jquery ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não está no último código que você mencionou

 

O problema é nessa chamada OnClick=load(

 

A função load que você está chamando não existe no seu código

Compartilhar este post


Link para o post
Compartilhar em outros sites

andrealoisio acredito que vc tenha toda razão mesmo, pq aí explicaria o erro:

Uncaught ReferenceError: load is not defined

 

O fato é que eu copiei de uma página aqui que também não tem o load mas funciona, só não sei pq, a página q funciona é essa:

<?php

		header("Content-Type: text/html; charset=ISO-8859-1",true);

		

		$patio = $_GET['patio'];

		$dia   = $_GET['dia'];

		$motivo = $_GET['motivo'];

		$dia = explode("/",$dia);

		$dd = $dia[0];

		$mm = $dia[1];

		$aaaa = $dia[2];

		

		session_start('login');

		$_SESSION['motivo'] = $motivo;

		

		echo "<div class='cab'>Patio $patio</div>";

		echo "<div class='menu' id='menu'>";

		

		//$sql = "SELECT * FROM agendamento_janelas WHERE patio='P$patio'";

		$sql ="SELECT * FROM agendamento_janelas J LEFT JOIN (

					SELECT * FROM agendamento_hora_bloqueada

					WHERE patio='P$patio' and dia_ref=$dd and mes_ref=$mm and ano_ref=$aaaa

				) AS H ON J.horario = H.hora

				WHERE J.patio='P$patio'  ";

			/*	AND J.prioridade <> 'CR'  */

		

		$cn = mysql_connect('localhost','root','root') or die('Erro: ' . mysql_error());

		$db = mysql_select_db('ormec',$cn);

		

		$qry = mysql_query( $sql );

		$cont = 0;

		$atual = $dia[0]."/".$dia[1]."/".$dia[2];

		

		if($motivo <> ""){

			echo "<table class='comBordaSimples'>";

			

			while( $rst = mysql_fetch_array($qry) ){

				$id = "CB".$cont;

				$hora = $rst['horario'];

				echo "<tr>";

					echo "<td>";

						echo $atual;

					echo "</td>";

					echo "<td>";

						echo $rst['horario']."<br>";

					echo "</td>";

					echo "<td>";

						echo "<input type='checkbox'";

						if ($rst[6]) {echo " checked ";}

						echo "name='$id' OnClick=load('DIV$id','server/php/bloquear.php','patio=$patio&dia=$atual&check=$id&horario=$hora'+'') />";

					echo "</td>";

					echo "<th>";

						echo "<div class='' id='DIV$id'>";

							if ($rst[6]) {echo "<div class='Bloqueado'>Bloqueado</div>";}

							else         {echo "<div class='Aberto'>Aberto</div>";}

						echo "</div>";

					echo "</th>";

				echo "<tr>";

				$cont++;

			}

			echo "</table>";

		}

		else { echo "Motivo Invalido."; }

		

		echo "</div>";			

		

?>

Essa faz o bloqueio de checkbox só que um por um e funciona, mas também dá o erro de load, acredito que a melhor prática era arrumar isso nas duas, qual seria a melhor forma, criar uma função javacript pra declarar essa função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele deve marcar os checkbox filho que está nesse código, uma vez marcado eu verifico se está checkado e faço o que preciso

echo "<input type='checkbox' name='teste1' id='teste2' class='marcar'";

	if ($rst[6]) {echo " checked ";}						
				
	echo "name='$id' OnClick=load('DIV$id','server/php/bloquear.php','patio=$patio&dia=$atual&check=$id&horario=$hora'+'') />";
						
echo "</td>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse load é o seguinte, quando funcionar o marcar todos, ele vai verificar se os checkboxfilhos estão checkados e depois através desse load ele acessa uma página chamada bloquear,php e faz um bloqueio.

A parte do bloqueio funciona, só que eu tenho que marcar os check um a um, pra não fazer isso estou tentando fazer funcionar o marcar todos, que até agora infelizmente não consegui, mas vai dar certo.

 

Mais uma vez andrealoisio obrigado pela ajuda q está prestando.

 

Se ajuda eu fiz um teste comentando a linha do load, assim :

echo "<td>";
						
     echo "<input type='checkbox' name='teste1' id='teste2' class='marcar'/>";

     //if ($rst[6]) {echo " checked ";}						
				
     //ultimo echo "name='$id' OnClick=load('DIV$id','server/php/bloquear.php','patio=$patio&dia=$atual&check=$id&horario=$hora'+'') />";

 echo "</td>";

Deixei só o checkbox filho, mas o marcar todos ainda não funciona ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Não quer colocar seu código num jsfiddle.net ?? fica mais fácil da gente te ajudar

 

Coloca o código lá e depois clica em save e nos passe o endereço que gerar, ajudar olhando o código assim sem contexto fica difícil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.