restriction noms de checkboxes

Le
Mihamina (R12y) Rakotomandimby
Bonjour,
J'ai un formulaire qui a des INPUT/checkboxes comme champs.
Le formulaire en question doit-etre envoyé à un script PHP.
Les "name" de chaque checkbox est le meme, de la forme "un_nom[]".
Ce sont les "value" qui les différencient.
LE souci c'est que maintenant, je veux faire un script qui coche/decoche
toutes les checboxes d'un coup. Je m'y prends avec getElementsById(): sous
Konqueror, à cause des [], "ça ne marche pas".
Est-ce le comportement normal?
Si je m'y prends avec le tableau des forms, ça fonctionne bien: j'ai bien un
check all /uncheck all fonctionnel.
Mais comme il se peut qu'il y ait un nombre de formulaire variable dans le
futur sur cette page, cette solution ne me convient pas.
Auriez-vous des pistes?
Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #729507

J'ai un formulaire qui a des INPUT/checkboxes comme champs.
Le formulaire en question doit-etre envoyé à un script PHP.
Les "name" de chaque checkbox est le meme, de la forme "un_nom[]".
Ce sont les "value" qui les différencient.
LE souci c'est que maintenant, je veux faire un script qui coche/decoche
toutes les checboxes d'un coup. Je m'y prends avec getElementsById():


Vu qu'un id est forcément unique dans la totalité d'une page HTML, il ne
peut pas exister de fonction getElement*s*ById(). Pour la même raison il
ne peut pas exister de fonction te retournant plusieurs éléments ayant
le même id.

Peut-être confonds-tu avec getElementsByName() ?

sous Konqueror, à cause des [], "ça ne marche pas".
Est-ce le comportement normal?


Je pense que oui. Maintenant, si ça ne fonctionne toujours pas avec
getElementsByName(), tu peux essayer avec un getElementById() sur le
formulaire, suivi par un firstChild() et des nextSibling().

Si je m'y prends avec le tableau des forms, ça fonctionne bien: j'ai bien un
check all /uncheck all fonctionnel.
Mais comme il se peut qu'il y ait un nombre de formulaire variable dans le
futur sur cette page, cette solution ne me convient pas.
Auriez-vous des pistes?


Voir ci-dessus (getElementById/firstChild/nextSibling).

ASM
Le #729506
Si je m'y prends avec le tableau des forms, ça fonctionne bien: j'ai bien un
check all /uncheck all fonctionnel.
Mais comme il se peut qu'il y ait un nombre de formulaire variable dans le
futur sur cette page, cette solution ne me convient pas.


En quoi ça gène d'avoir plusieurs forms ?

<html>
<script type="text/javascript">
function resete(quoi) { // décocher les checkboxes du form
if(quoi.checked) {
var el = quoi.form.elements['truc[]'];
for(var i=0; i<el.length; i++) el[i].checked = false;
}
}
onload = function() { // decocher la checkbox principale
var I = document.getElementsByTagName('INPUT');
for(var j=0; j<I.length; j++)
if(I[j].name == 'truc[]')
I[j].onclick = function() {
this.form.elements[0].checked = false;
}
}
</script>

<form onsubmit="return false;">
<p>tout décocher : <input type=checkbox onclick="resete(this)">
<p>item 1 : <input type=checkbox name="truc[]" value="1">
<p>item 2 : <input type=checkbox name="truc[]" value="2">
<p>item 3 : <input type=checkbox name="truc[]" value="3">
<p><input type=submit value="OK">
</form>
<form onsubmit="return false;">
<p>tout décocher : <input type=checkbox onclick="resete(this)">
<p>item 1 : <input type=checkbox name="truc[]" value="1">
<p>item 2 : <input type=checkbox name="truc[]" value="2">
<p>item 3 : <input type=checkbox name="truc[]" value="3">
<p><input type=submit value="OK">
</form>
</html>


Si les noms peuvent être différents d'un form à l'autre
il n'y a qu'une petite modif à prévoir :

function resete(quoi) { // décocher les checkboxes du form
if(quoi.checked) {
var el = quoi.form.elements[quoi.form.elements[1].name];
for(var i=0; i<el.length; i++) el[i].checked = false;
}
}

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

ASM
Le #729229

Si les noms peuvent être différents d'un form à l'autre
il n'y a qu'une petite modif à prévoir :

function resete(quoi) { // décocher les checkboxes du form
if(quoi.checked) {
var el = quoi.form.elements[quoi.form.elements[1].name];
for(var i=0; i<el.length; i++) el[i].checked = false;
}
}


à compléter de :

onload = function() { // decocher la checkbox principale
var F = document.forms, I;
for(var i=0; i<F.length; i++) {
I = F[i].getElementsByTagName('INPUT');
for(var j=0; j<I.length; j++)
if(I[j].name && I[j].type == 'checkbox')
I[j].onclick = function() {
this.form.elements[0].checked = false;
}
}
}


--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Publicité
Poster une réponse
Anonyme