OVH Cloud OVH Cloud

Inverser une sélection de cases à cocher

19 réponses
Avatar
Denis Bitouzé
Bonjour,

j'en suis =E0 mes d=E9buts en javascript et, voulant proposer un moyen
simple d'inverser une s=E9lection de cases =E0 cocher, j'ai trouv=E9 sur la
toile un script que j'ai un peu adapt=E9 et qui fonctionne bien :

function invert(){
void(d=3Ddocument);
void(el=3Dd.getElementsByName('absents'));
for(i=3D0;i<el.length;i++)
if(el[i].checked =3D=3D 1)
{
el[i].checked =3D 0;
}
else {
el[i].checked =3D 1;
}
}

(au passage, je ne comprends pas du tout ce qu'est ce =AB void =BB mais
passons...)

Je me disais qu'il serait peut-=EAtre plus efficace, en tout cas plus =AB
joli =BB, de d=E9finir cette fonction de la fa=E7on suivante :

function invert(){
void(d=3Ddocument);
void(el=3Dd.getElementsByName('absents'));
for(i=3D0;i<el.length;i++)
el[i].checked=3D!el[i].checked;
}

mais, =E0 ma grande surprise, =E7a ne fonctionne pas, et m=EAme en passant
par un interm=E9diaire, du genre :

est_coche=3Del[i].checked;
el[i].checked=3D!est_coche;

J'aurais bien aim=E9 comprendre seul pourquoi mais je n'ai r=E9ussi =E0 fai=
re
fonctionner aucun d=E9bogueur javascript :(

Merci d'avance pour tout =E9claircissement...
--=20
Denis

9 réponses

1 2
Avatar
Denis Bitouzé
Le jeudi 02/07/09 à 14h26,
Mickaël Wolff a écrit :

Denis Bitouzé a écrit :

> (au passage, je ne comprends pas du tout ce qu'est ce « void » mais
> passons...)

À étouffer les messages d'erreur du moteur Javascript. En effet,
il faut déclarer une variable avant de pouvoir l'utiliser, sinon un
warning doit être émis. Ici l'usage de l'opérateur void est
maladroit, et risque même de générer des bogues indécrotables.



OK.

Pourtant chez moi ça marche ©



Chez moi aussi, maintenant® :)

var invert = function(node)
{
node.checked = ! node.checked ;
}

var invertAll = function()
{
var nodes = document.getElementsByName('toto[]') ;
Array.forEach(nodes, invert) ;
}



Ah, élégant !

> J'aurais bien aimé comprendre seul pourquoi mais je n'ai réussi à
> faire fonctionner aucun débogueur javascript :(

Qu'est-ce que tu appelles « débogueur javascript » ?



Par exemple Firebug :

http://getfirebug.com/

ou ça :

http://www.netbeans.org/kb/docs/web/js-debugger-ug.html

Si vous en avez d'autres à me conseiller, je suis preneur...

Merci !
--
Denis
Avatar
Denis Bitouzé
Le vendredi 03/07/09 à 17h46,
SAM a écrit :

FireBug c'est bien, mais pour les erreurs de JS la console est
amplement suffisante.



Euh... la console d'un terminal sous Linux ? Si oui, comment capte-t-on
ces erreurs ?

L'avantage de Firebug (que j'ai enfin réussi à faire fonctionner !),
c'est qu'on peut « espionner » les valeurs prises par certaines
variables...
--
Denis
Avatar
Denis Bitouzé
Le jeudi 02/07/09 à 15h17,
Pascal PONCET a écrit :

<code>
function invertCheckBox(boxName) {
var boxArray = document.getElementsByTagName(boxName);
for(var i=0; i < boxArray.length; i++) {
if(boxArray[i].type.toLowerCase != "checkbox") continue;
boxArray[i].checked = ! boxArray[i].checked;
}
}
</code>



Pour les archives, je corrige juste une petite erreur (il manque une
paire de parenthèses vide après toLowerCase) :

<code>
function invertCheckBox(boxName) {
var boxArray = document.getElementsByTagName(boxName);
for(var i=0; i < boxArray.length; i++) {
if(boxArray[i].type.toLowerCase() != "checkbox") continue;
boxArray[i].checked = ! boxArray[i].checked;
}
}
</code>

Encore merci !
--
Denis
Avatar
Dr J R Stockton
En fr.comp.lang.javascript , 2
Juillet 2009 10:15:18, Denis Bitouzé a
ecrit:

el[i].checked=!el[i].checked;



ou el[i].checked ^= 1 ; // ??

--
(c) John Stockton, nr London UK. ?@merlyn.demon.co.uk IE7 FF3 Op9 Sf3
news:comp.lang.javascript FAQ <URL:http://www.jibbering.com/faq/index.html>.
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Avatar
Mickaël Wolff
Dr J R Stockton a écrit :

ou el[i].checked ^= 1 ; // ??



Toujours aussi élégant John ;)

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Avatar
Pascal PONCET
Dr J R Stockton a écrit :

ou el[i].checked ^= 1 ; // ??



Alors là, chapeau !

1. Je ne savais même pas qu'on pouvait utiliser les affectations
composées sur les opérateurs logiques (ou ça ne m'était jamais venu à
l'esprit vu la rareté d'emploi [je parle pour moi]).

2. Cela dit, je ne l'utiliserais pas sans commenter la ligne, car je
trouve que l'interprétation n'est pas d'une lecture immédiate (genre 6
mois plus tard en reprenant le code). Donc, désolé, mais je trouve
finalement le gain très relatif.

3. Reste l'esthétique, incontestable.

Cordialement,
Pascal


PS: il me vient une idéee, pourquoi ne pas prototyper une méthode
appliquée à l'objet "Boolean" pour inverser sa valeur ? Reste à lui
trouver un nom explicite ("invert()" ?).

<code>
if(! Boolean.prototype.invert) {
Boolean.prototype.invert = function() {
this ^= 1; // là je ne suis pas sûr de mon coup !
}
}
</code>
Avatar
Mickaël Wolff
Pascal PONCET a écrit :

2. Cela dit, je ne l'utiliserais pas sans commenter la ligne, car je
trouve que l'interprétation n'est pas d'une lecture immédiate (genre 6
mois plus tard en reprenant le code). Donc, désolé, mais je trouve
finalement le gain très relatif.



el[i].checked ^= true ; // serait plus lisible dans ce cas ?

PS: il me vient une idéee, pourquoi ne pas prototyper une méthode
appliquée à l'objet "Boolean" pour inverser sa valeur ? Reste à lui
trouver un nom explicite ("invert()" ?).



Boolean.not ?

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Avatar
Dr J R Stockton
En fr.comp.lang.javascript <4a4f4c56$0$442$, 4
Juillet 2009 14:34:34, Mickaël Wolff a écrit
:
Pascal PONCET a écrit :

2. Cela dit, je ne l'utiliserais pas sans commenter la ligne, car je
trouve que l'interprétation n'est pas d'une lecture immédiate (genre 6
mois plus tard en reprenant le code). Donc, désolé, mais je trouve
finalement le gain très relatif.



el[i].checked ^= true ; // serait plus lisible dans ce cas ?



ou el[i].checked ^= 1; // basculez

PS: il me vient une idéee, pourquoi ne pas prototyper une méthode
appliquée à l'objet "Boolean" pour inverser sa valeur ? Reste à lui
trouver un nom explicite ("invert()" ?).



Boolean.not ?



Pour moi, la méthode ne marche pas.

--
(c) John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v6.05 MIME.
Web <URL:http://www.merlyn.demon.co.uk/> - FAQish topics, acronyms, & links.
Proper <= 4-line sig. separator as above, a line exactly "-- " (SonOfRFC1036)
Do not Mail News to me. Before a reply, quote with ">" or "> " (SonOfRFC1036)
Avatar
Mickaël Wolff
Dr J R Stockton a écrit :
el[i].checked ^= true ; // serait plus lisible dans ce cas ?



ou el[i].checked ^= 1; // basculez



Certes, mais ici mon commentaire n'était pas un commentaire de code à
proprement parlé. C'est plutôt un détournement pour commenter la
proposition de syntaxe.

Boolean.not ?



Pour moi, la méthode ne marche pas.


Là aussi c'était une proposition, mais pour un nom de méthode :D

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
1 2