11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour Smiley biggrin

Je souhaiterai ajouter une fonction en plus dans mon script ci dessous, une checkbox qui se décoche lorsque l'on coche celles ci-dessous ou qui les décochent quand on la coche (j'espere que je suis clair Smiley confuse ).
J'ai trouvé plusieurs scripts mais j'ai déjà une fonction onclick dans mon formulaire, est-il possible d'en mettre plusieurs (j'ai essayé sans succès).
J'espère que vous pourrez m'aider...

A+

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
<script type="text/javascript">
function affichesecteur(ch){
var secteur = document.getElementById(ch);
secteur.value='';
for (i=1;i<7;i++){
	coch_secteur = document.getElementById('coch_secteur'+i);
	if (coch_secteur.checked) {
		if (secteur.value!=''){
			secteur.value += ', ';
		}
		secteur.value += ' '+coch_secteur.title+' ';
	}
}
}
</script>
</head>
<body>
<input type="text" id="secteur" name="secteur" class="recherche" value="">
<ul>
	<li><input type="checkbox" id="coch_secteur1" name="secteurgeo[]" value="Essai1" title="Essai1" onclick="affichesecteur('secteur');">Essai1</li>
	<li><input type="checkbox" id="coch_secteur2" name="secteurgeo[]" value="Essai2" title="Essai2" onclick="affichesecteur('secteur');">Essai2</li>
	<li><input type="checkbox" id="coch_secteur3" name="secteurgeo[]" value="Essai3" title="Essai3" onclick="affichesecteur('secteur');">Essai3</li>
	<li><input type="checkbox" id="coch_secteur4" name="secteurgeo[]" value="Essai4" title="Essai4" onclick="affichesecteur('secteur');">Essai4</li>
	<li><input type="checkbox" id="coch_secteur5" name="secteurgeo[]" value="Essai5" title="Essai5" onclick="affichesecteur('secteur');">Essai5</li>
	<li><input type="checkbox" id="coch_secteur6" name="secteurgeo[]" value="Essai6" title="Essai6" onclick="affichesecteur('secteur');">Essai6</li>
</ul>
</body>
</html>

Modifié par Sclormu (05 Feb 2008 - 15:06)
C'est simple Smiley smile

Par exemple rajoute une fonction javascript dans l'entête :
function selectall() {
	var checkboxSelectall = document.getElementById('coch_selectall');
	for (i=1;i<7;i++){
		coch_secteur = document.getElementById('coch_secteur'+i);
		if (checkboxSelectall.checked) {
			coch_secteur.checked = true;
		} else {
			coch_secteur.checked = false;
		}
	}
}


et bien sur rajoute un checkbox qui appel la fameuse fonction :

	<li><input type="checkbox" id="coch_selectall" name="secteurgeo[]" value="selectall" title="selectall" onclick="selectall();">Tout selectionner</li>


Et c'est réglé !
Pour écrire les checkbox coché je te laisse faire ... c'est comme plus haut !

KalNex
Bonjour KalNex Smiley biggrin ,

merci pour ton aide, en faite je ne souhaite pas que cette checkbox les cochent toutes mais qu'elle les décochent quand une ou plusieurs sont cochées... et l'inverse aussi. C'est soit la ckeckbox seule qui est cochée, soit les autres...(désolé si c'est pas clair Smiley confused )

A+
Pas nécessairement besoin d'une checkbox alors.
Mais fait un test sur toutes tes checkbox et retourne un flag d'indiquant qu'un ou plusieurs checkbox sont coché. Ensuite agit en conséquence.
J'ai pas le temps de tester là ... mais ça doit pas être bin compliqué.
En fait je vois pas du tout ce que tu veux faire ... Smiley confus

Tu pourrais pas mieux décrire ton projet ? merki Smiley ravi
a écrit :
En fait je vois pas du tout ce que tu veux faire ...

Smiley confused Désolé KalNex...
En faite le script que tu me propose est ce qu'il me faut, il faut juste que lorsque j'ai tout sélectionné avec celle-ci:

<input type="checkbox" id="coch_selectall" name="secteurgeo[]" value="selectall" title="selectall" onclick="selectall();">Tout selectionner

elle se décoche quand je décoche l'une de cela:

<ul>
	<li><input type="checkbox" id="coch_secteur1" name="secteurgeo[]" value="Essai1" title="Essai1" onclick="affichesecteur('secteur');">Essai1</li>
	<li><input type="checkbox" id="coch_secteur2" name="secteurgeo[]" value="Essai2" title="Essai2" onclick="affichesecteur('secteur');">Essai2</li>
	<li><input type="checkbox" id="coch_secteur3" name="secteurgeo[]" value="Essai3" title="Essai3" onclick="affichesecteur('secteur');">Essai3</li>
	<li><input type="checkbox" id="coch_secteur4" name="secteurgeo[]" value="Essai4" title="Essai4" onclick="affichesecteur('secteur');">Essai4</li>
	<li><input type="checkbox" id="coch_secteur5" name="secteurgeo[]" value="Essai5" title="Essai5" onclick="affichesecteur('secteur');">Essai5</li>
	<li><input type="checkbox" id="coch_secteur6" name="secteurgeo[]" value="Essai6" title="Essai6" onclick="affichesecteur('secteur');">Essai6</li>
</ul>


Merci KalNex... Smiley biggrin
Okkkk

ba regarde, il suffit que tu modifie un peu ta fonction affichesecteur() pour qu'elle détecte quand un checkbox est dévalidé (un peu de la même manière que tu regarde quand c'est validé).

function affichesecteur(ch){
	var secteur = document.getElementById(ch);
	secteur.value='';
	for (i=1;i<7;i++){
		[#red]var[/#] coch_secteur = document.getElementById('coch_secteur'+i);
		if (coch_secteur.checked) {
			if (secteur.value!=''){
				secteur.value += ', ';
			}
			secteur.value += ' '+coch_secteur.title+' ';
		} [#red]else flagOneNotChecked = true;[/#]
	}
	[#red]if (flagOneNotChecked) {
		var checkboxSelectall = document.getElementById('coch_selectall');
		checkboxSelectall.checked = false;
	}[/#]
}
function selectall() {
	var checkboxSelectall = document.getElementById('coch_selectall');
	for (i=1;i<7;i++){
		var coch_secteur = document.getElementById('coch_secteur'+i);
		if (checkboxSelectall.checked) {
			coch_secteur.checked = true;
		} else {
			coch_secteur.checked = false;
		}
	}
}


Pense a mettre des variables locales dans tes fonctions, c'est pas grand chose mais bon... c'est toujours ça de moins qui reste dans le navigateur !

KalNex Smiley smile
Merci beaucoup KalNex Smiley biggrin , c'est ce que je souhaitai...
Est ce que je peux ajouter cela (en rouge):

<li><input type="checkbox" id="coch_selectall" name="secteurgeo[]" value="selectall" title="selectall" onclick="selectall();[#red]affichesecteur('secteur');[/#]">Tout selectionner</li>

je sais pas si c'est correct de faire comme cela...
a écrit :

Pense a mettre des variables locales dans tes fonctions, c'est pas grand chose mais bon... c'est toujours ça de moins qui reste dans le navigateur !

merci pour tes conseils mais javascript reste encore à apprendre pour moi...

A+
Humm oui et non, c'est la bonne manière d'inserer une autre fonction a l'évenement mais cela ne te servira a rien de mettre cette fonction ci!

On apprend tous Smiley cligne
Moi même je suis un débutant confirmé Smiley langue

Sinon réexplique ce que tu souhaites faire (le rajout de fonction que tu indiques).

KalNex
a écrit :

Sinon réexplique ce que tu souhaites faire (le rajout de fonction que tu indiques).

Cela affiche la valeur des checkbox cochées dans un champ texte...J'ai fait une liste déroulante avec des checkbox.

A+ Smiley biggrin
Il faut que tu l'ajoute dans la fonction qui te sert a tout selectionner ou tout déselectionner : selectall() ici.

function selectall() {
	var checkboxSelectall = document.getElementById('coch_selectall');
	[#red]var secteur = document.getElementById('secteur'); // équivalent a ton "var secteur = document.getElementById(ch);" tu n'a pas besoin de paramètre dans ta fonction, les ID sont là pour ça [cligne]
	secteur.value='';[/#]
	for (i=1;i<7;i++){
		var coch_secteur = document.getElementById('coch_secteur'+i);
		if (checkboxSelectall.checked) {
			coch_secteur.checked = true;
			
			[#red]if (secteur.value!=''){
				secteur.value += ', ';
			}
			secteur.value += ' '+coch_secteur.title+' ' ;[/#]
		} else {
			coch_secteur.checked = false;
		}
	}
}


C'est juste un rajout de ce que tu as dans ta première fonction, si tu veux gagner en expérience demande toi en premier ce que fait ta fonction et comment, met en commentaire, voit ce qui ne marche plus etc ...
Et utilise les ID pas besoin de paramètre dans ta premiere fonction (comme j'ai mis en commentaire). Smiley cligne

KalNex
Génial, merci KalNex Smiley biggrin

j'ai du mal a me mettre au javascript, peut etre parce que la plus part du temps on trouve les scripts tout fait, j'ai assimilé le php alors je devrais pouvoir en faire autant avec le javascript...

Merci...A+
Moi aussi j'ai eu du mal a m'y mettre je comprends t'en fais pas ! Smiley lol

Ca peut rebuter en premier lieu le Javascript mais pour faire du Dhtml c'est assez bien Smiley smile
Bonjour Smiley biggrin , je relance mon topic car j'aimerai encore ajouter une amélioration au script.
J'ai trifouillé un peu mais sans succès...
je souhaiterai ajouter (si c'est possible) ce qui est en rouge ci-dessous:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
<script type="text/javascript">
function affichesecteur(ch){
	var secteur = document.getElementById(ch);
	secteur.value='';
	for (i=1;i<7;i++){
		var coch_secteur = document.getElementById('coch_secteur'+i);
		if (coch_secteur.checked) {
			if (secteur.value!=''){
				secteur.value += ', ';
			}
			secteur.value += ' '+coch_secteur.title+' ';
		} else flagOneNotChecked = true;
	}
	if (flagOneNotChecked) {
		var checkboxSelectall = document.getElementById('coch_selectall');
		checkboxSelectall.checked = false;
	}
}

function selectall() {
	var checkboxSelectall = document.getElementById('coch_selectall');
	var secteur = document.getElementById('secteur');
	secteur.value='';
	for (i=1;i<7;i++){
		var coch_secteur = document.getElementById('coch_secteur'+i);
		if (checkboxSelectall.checked) {
			coch_secteur.checked = true;		
			if (secteur.value!=''){
				secteur.value += ', ';
			}
			secteur.value += ' '+coch_secteur.title+' ' ;
		} else {
			coch_secteur.checked = false;
		}
	}
}
</script>
</head>
<body>
<input type="text" id="secteur" name="secteur" class="recherche" value="">
<ul>
	<li><input type="checkbox" id="coch_selectall" name="secteurgeo[]" value="selectall" title="selectall" onclick="selectall();">Tout selectionner</li>
	
	[#red]<li><input type="checkbox" id="coch_selectall" name="secteurgeo[]" value="selectall" title="selectall" onclick="selectall();">Selectionner les rouges</li>[/#]
	
	<li><input type="checkbox" id="coch_secteur1" name="secteurgeo[]" value="Vert" title="Vert" onclick="affichesecteur('secteur');">Vert</li>
	<li><input type="checkbox" id="coch_secteur2" name="secteurgeo[]" value="bleu" title="bleu" onclick="affichesecteur('secteur');">bleu</li>
	<li><input type="checkbox" id="coch_secteur3" name="secteurgeo[]" value="Rouge" title="Rouge" onclick="affichesecteur('secteur');">Rouge</li>
	<li><input type="checkbox" id="coch_secteur4" name="secteurgeo[]" value="Rouge" title="Rouge" onclick="affichesecteur('secteur');">Rouge</li>
	<li><input type="checkbox" id="coch_secteur5" name="secteurgeo[]" value="marron" title="marron" onclick="affichesecteur('secteur');">marron</li>
	<li><input type="checkbox" id="coch_secteur6" name="secteurgeo[]" value="Rouge" title="Rouge" onclick="affichesecteur('secteur');">Rouge</li>
</ul>
</body>
</html>


Merci de votre aide A+
Bon, j'ai fais un quelques choses, mais je trouve ça un peu compliqué pour ce que c'est.
Ça fonctionne impec! mais bon je suis sur qu'il y a moyen d'optimiser mieux que ce que j'ai réussi a faire.

Je t'ai concocté une source un peu générique, c'est a dire que tu peux mettre autant de champ checkbox que tu souhaites (rouge ou pas ! Smiley langue ).

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title></title>
		<script type="text/javascript">
			<!--
			function verifSelect() {
				// on selectionne les checkbox all et allred puis le champ text
				var checkboxSelectall = document.getElementById('coch_selectall');
				var checkboxSelectallred = document.getElementById('coch_selectallred');
				var secteur = document.getElementById('secteur');
				secteur.value='';
				
				// on selectionne les checkbox red et others
				var boxOthers = document.getElementsByName('others');
				var boxRed = document.getElementsByName('red');
				var boxOthersCount = 0, boxRedCount = 0; // initialisations de compteurs
				
				// Pour chaque checkbox others on regarde s'il est coché ou non afin de rajouter sa valeur dans le champ text
				for ( var i=0; i < boxOthers.length; i++ ) {
					if ( boxOthers[i].checked ) {
						if (secteur.value!='') secteur.value += ', ';
						secteur.value += ' '+boxOthers[i].value+' ';
						boxOthersCount ++;
					}
				}
				// On verifie si toutes les checkbox others sont coché ou non
				if ( boxOthersCount == boxOthers.length ) 	allOthersSelected = true;
				else 										allOthersSelected = false;
				// Pour chaque checkbox red on regarde s'il est coché ou non afin de rajouter sa valeur dans le champ text
				for ( var i=0; i < boxRed.length; i++ ) {
					if ( boxRed[i].checked ) {
						if (secteur.value!='') secteur.value += ', ';
						secteur.value += ' '+boxRed[i].value+' ';
						boxRedCount ++;
					}
				}
				// On verifie si toutes les checkbox red sont coché ou non
				if ( boxRedCount == boxRed.length ) allRedSelected = true;
				else 								allRedSelected = false;
				
				// Si toutes les checkbox sont cochées les checkbox all et allred doivent l'être aussi, 
				// si toutes les checkbox rouge sont cochées le checkbox allred doit l'être aussi,
				// sinon aucune ne doit être cochées
				if ( allRedSelected && allOthersSelected ) {
					checkboxSelectall.checked = true;
					checkboxSelectallred.checked = true;
				}
				else if ( allRedSelected ) {
					checkboxSelectall.checked = false;
					checkboxSelectallred.checked = true;
				}
				else {
					checkboxSelectall.checked = false;
					checkboxSelectallred.checked = false;
				}
			}

			function selectall() {
				var checkboxSelectall = document.getElementById('coch_selectall');
				var checkboxSelectallred = document.getElementById('coch_selectallred');
				var boxOthers = document.getElementsByName('others');
				var boxRed = document.getElementsByName('red');
				// si le checkbox all est coché on coche tous les checkbox !! (red et others)
				if (checkboxSelectall.checked) {
					for ( i=0; i < boxOthers.length; i++ ) boxOthers[i].checked = true;
					for ( i=0; i < boxRed.length; i++ ) boxRed[i].checked = true;
					checkboxSelectallred.checked = true; // si tout est coché le checkbox allred aussi ...
				} else {
					for ( i=0; i < boxOthers.length; i++ ) boxOthers[i].checked = false;
					for ( i=0; i < boxRed.length; i++ ) boxRed[i].checked = false;
					checkboxSelectallred.checked = false;
				}
				// Lancement de la vérification pour affichage du texte et complément sur les all et allred
				verifSelect();
			}
			
			function selectallred() {
				var checkboxSelectall = document.getElementById('coch_selectall');
				var checkboxSelectallred = document.getElementById('coch_selectallred');
				var boxRed = document.getElementsByName('red');
				// si le checkbox allred est coché on coche tous les checkbox rouge !!
				if (checkboxSelectallred.checked) {
					for ( i=0; i < boxRed.length; i++ ) boxRed[i].checked = true;
				} else {	
					for ( i=0; i < boxRed.length; i++ ) boxRed[i].checked = false;
					checkboxSelectall.checked = false; // si le checkbox allred est décoché le all n'est plus actif
				}
				// Lancement de la vérification pour affichage du texte et complément sur les all et allred
				verifSelect();
			}
			// -->
		</script>
	</head>
	<body>
		<input type="text" id="secteur" name="secteur" class="recherche" value="" size="160">
		<ul>
			<li><input type="checkbox" id="coch_selectall" name="seltout" value="valueSelectall" title="Selection de tout les inputs" onclick="selectall();">Tout selectionner</li>
			<li><input type="checkbox" id="coch_selectallred" name="selrouge" value="valueSelectallred" title="Selection de tout les inputs rouges" onclick="selectallred();">Selectionner les rouges</li>
			<li><input type="checkbox" name="others" value="valueVert" title="Selection de cet input" onclick="verifSelect();">Vert</li>
			<li><input type="checkbox" name="others" value="valueBleu" title="Selection de cet input" onclick="verifSelect();">bleu</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="others" value="valueMarron" title="Selection de cet input" onclick="verifSelect();">marron</li>
			<li><input type="checkbox" name="others" value="valueBleu" title="Selection de cet input" onclick="verifSelect();">bleu</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="others" value="valueJaune" title="Selection de cet input" onclick="verifSelect();">jaune</li>
			<!-- <li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="others" value="valueMarron" title="Selection de cet input" onclick="verifSelect();">marron</li>
			<li><input type="checkbox" name="others" value="valueBleu" title="Selection de cet input" onclick="verifSelect();">bleu</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="others" value="valueMarron" title="Selection de cet input" onclick="verifSelect();">marron</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="others" value="valueMarron" title="Selection de cet input" onclick="verifSelect();">marron</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li>
			<li><input type="checkbox" name="others" value="valueMarron" title="Selection de cet input" onclick="verifSelect();">marron</li>
			<li><input type="checkbox" name="red" value="valueRouge" title="Selection de cet input" onclick="verifSelect();">Rouge</li> -->
		</ul>
	</body>
</html>


J'ai commenté pour que ça soit a peu près compréhensible, si tu as une question n'hésite pas ...

Et si quelqu'un a un commentaire a faire sur mon code qu'il n'hésite pas non plus, je suis un peu noob aussi Smiley confused

KalNex[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
Bonjour KalNex Smiley biggrin ,

merci beaucoup pour ton aide, je ne pensais pas que tu aurais à revoir tout le code... Smiley cligne
ça fonctionne au poil mais j'ai un souci avec getElementsByName, je ne peut mettre qu'un seul nom et ici pour que le code fonctionne il faut mettre name="others" et name="red". Ne peut on pas le faire comme le code pécédent avec onclick="affiche('others');" et onclick="affiche('red');"?

A+

Ludo