|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Bonjour,
cette fonction fonctionne quand je coche la case, mais quand je décoche rien ne se passe. Je veux griser un bouton en fonction de l'état du checkbox. Code :
function apparait() { if (document.form1.choix.checked){ document.getElementById('valid_select').disabled=true; }else{ document.getElementById('valid_select').disabled=false; } } |
|
|
|
|
|
#2 |
![]() Date d'inscription: janvier 2007
Messages: 7 510
|
Bonjour,
il faudrait voir le code HTML associé, avec l'appel de la fonction ... A+ |
|
|
|
|
|
#3 |
![]() Date d'inscription: septembre 2007
Localisation: Madagascar
Messages: 2 025
|
Bonjour,
+1E.Bzz Mais tu peux simplifier ton code. Code :
function apparait() { document.getElementById('valid_select').disabled=document.form1.choix.checked; } |
|
|
|
|
#4 | |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Citation:
Le code HTML est un tableau je vous met une partie simplifiée : Code :
<html> <head> </head> <body> <button type="submit" name="valid_select" id="valid_select" disabled="disabled">Valider la sélection</button> <table id="tableau"> <thead> <tr> <th><input type="checkbox" name="all" id="all" onclick="selectall(document.form1.all,document.form1.choix)"><br>Tous</th> <th>tab1</th> </tr> </thead> <tbody> <tr> <td><input type="checkbox" name="choix" id="choix" value="1" onclick="apparait()"></td> <td>donnee</td> </tr> </tbody> </table> </body> </html> |
|
|
|
|
|
|
#5 |
![]() Date d'inscription: janvier 2007
Messages: 7 510
|
Simplifier un code est différent de corriger une erreur.
La suggestion d'Andry reste donc tout à fait valable Sauf dans les cas extrêmes, mieux vaut ne pas simplifier ![]() Ici par exemple, tu te retrouves avec un type="submit" qui n'est pas dans un form (pour nous, car je suppose que le form existe bien, mais on ne peut t'aider que sur le code que tu nous montres). Au passage, la balise <button> est dépréciée et ne peut de toutes façons pas être de type="submit" => à remplacer par un input type="submit"! Donc, le code complet serait préférable ... A+ |
|
|
|
|
|
#6 |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Le code comprend du PHP, requêtes ect... pas essentiel pour le test, donc j'ai ajouté les fonctions Javascript dans le head pour l'essai et cela donne un petit tableau exploitable :
Code :
<html> <head> <script language="JavaScript"> function selectall(cas,choix){ //test si on a plusieur ligne if(choix.length>0){ if (cas.checked){ for (var i=0; i<choix.length;i++){ choix[i].checked=true //On coche tous } document.getElementById('valid_select').disabled=false; } else{ for (var i=0; i<choix.length;i++){ choix[i].checked=false //On décoche tous } document.getElementById('valid_select').disabled=true; } } } function apparait() { if (document.form1.choix.checked){ document.getElementById('valid_select').disabled=true; }else{ document.getElementById('valid_select').disabled=false; } } </script> </head> <body> <?php $self = $_SERVER['PHP_SELF']; echo "<form method='POST' action='$self' name='form1' id='form1'>\n"; ?> <button type="submit" name="valid_select" id="valid_select" disabled="disabled">Valider la sélection</button> <table border="1" id="tableau"> <thead> <tr> <th><input type="checkbox" name="all" id="all" onclick="selectall(document.form1.all,document.form1.choix)"><br>Tous</th> <th>col1</th> </tr> </thead> <tbody> <tr> <td><input type="checkbox" name="choix" id="choix" value="1" onclick="apparait()"></td> <td>donnee1</td> </tr> <tr> <td><input type="checkbox" name="choix" id="choix" value="1" onclick="apparait()"></td> <td>donnee2</td> </tr> </tbody> </table> </form> </body> </html> |
|
|
|
|
|
#7 | ||
![]() Date d'inscription: septembre 2007
Localisation: Madagascar
Messages: 2 025
|
Le code HTML généré mais pas le php
Citation:
Code :
<input type="submit" name="valid_select" id="valid_select" disabled="disabled" value="Valider la sélection"/> Citation:
|
||
|
|
|
|
#8 | |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Citation:
Le code avec le PHP : Code :
<html> <head> <script language="JavaScript"> function selectall(cas,choix){ //test si on a plusieur ligne if(choix.length>0){ if (cas.checked){ for (var i=0; i<choix.length;i++){ choix[i].checked=true //On coche tous } document.getElementById('valid_select').disabled=false; } else{ for (var i=0; i<choix.length;i++){ choix[i].checked=false //On décoche tous } document.getElementById('valid_select').disabled=true; } } } function apparait() { if (document.form1.choix.checked){ document.getElementById('valid_select').disabled=false; }else{ document.getElementById('valid_select').disabled=true; } } </script> </head> <body> <?php echo "<form method='POST' action='$self' name='form1' id='form1'>\n"; ?> <input type="submit" name="valid_select" id="valid_select" disabled="disabled" value="Valider la sélection"/> <table border="1" id="tableau"> <thead> <tr> <th><input type="checkbox" name="all" id="all" onclick="selectall(document.form1.all,document.form1.choix)"><br>Tous</th> <th>col1</th> </tr> </thead> <?php $requete = mysql_query("select champ from table"); while($row = mysql_fetch_array($requete)){ ?> <tbody> <tr> <td><input type="checkbox" name="choix" id="choix" value="1" onclick="apparait()"></td> <td><?php echo $row['champ']; ?></td> </tr> </tbody> <?php } ?> </table> </form> </body> </html> |
|
|
|
|
|
|
#9 |
![]() Date d'inscription: juin 2008
Localisation: Bordeaux
Âge: 39
Messages: 6 720
|
En incrémentant un compteur dans le while pour le coller à l'id par exemple...
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
|
|
|
|
|
#10 | |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Citation:
|
|
|
|
|
|
|
#11 | |
![]() Date d'inscription: janvier 2007
Messages: 7 510
|
Citation:
Tu initialise ton compteur avant la boucle, puis à chaque "tour", tu concatènes ce compteur à la partie fixe de l'id, puis tu l'incrémentes pour le passage suivant. Le reste du while() demeure identique ... A+ |
|
|
|
|
|
|
#12 |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Ok maintenant j'ai bien un id différent pour chaque entrée sur mes checkbox, mais je ne peux plus récupérer leur valeurs pour savoir si elles sont cochées ou pas.
Code :
<html> <head> <script language="JavaScript"> function selectall(cas,choix){ //test si on a plusieur ligne if(choix.length>0){ if (cas.checked){ for (var i=0; i<choix.length;i++){ choix[i].checked=true //On coche tous } document.getElementById('valid_select').disabled=false; } else{ for (var i=0; i<choix.length;i++){ choix[i].checked=false //On décoche tous } document.getElementById('valid_select').disabled=true; } } } function apparait() { if (document.form1.choix.checked){ document.getElementById('valid_select').disabled=false; }else{ document.getElementById('valid_select').disabled=true; } } </script> </head> <body> <?php echo "<form method='POST' action='$self' name='form1' id='form1'>\n"; ?> <input type="submit" name="valid_select" id="valid_select" disabled="disabled" value="Valider la sélection"/> <table border="1" id="tableau"> <thead> <tr> <th><input type="checkbox" name="all" id="all" onclick="selectall(document.form1.all,document.form1.choix)"><br>Tous</th> <th>col1</th> </tr> </thead> <?php $requete = mysql_query("select id,champ from table"); $i = 1; while($row = mysql_fetch_array($requete)){ $compteur = $i++; ?> <tbody> <tr> <td><td class='check'><input type="checkbox" name="<?php echo $compteur; ?>" id="<?php echo $compteur; ?>" value="<?php echo $row['id']; ?>" onclick="apparait()"></td></td> <td><?php echo $row['champ']; ?></td> </tr> </tbody> <?php } ?> </table> </form> </body> </html> |
|
|
|
|
|
#13 | |
![]() Date d'inscription: janvier 2007
Messages: 7 510
|
Citation:
Il ne s'agissait que des ID. Par ailleurs, tu devrait conserver une partie fixe à tes id et la concaténer au compteur. A+ |
|
|
|
|
|
|
#14 |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Ok j'ai fais les modifications :
Code :
<?php $requete = mysql_query("select id,champ from table"); $i = 1; while($row = mysql_fetch_array($requete)){ $compteur = "choix".$i++; ?> <tbody> <tr> <td><td class='check'><input type="checkbox" name="choix" id="<?php echo $compteur; ?>" value="<?php echo $row['id']; ?>" onclick="apparait()"></td></td> |
|
|
|
|
|
#15 |
![]() Date d'inscription: janvier 2007
Messages: 7 510
|
Ben pareil qu'avant justement : dans selectall() en parcourant ton tableau choix[]
D'ailleurs, ça permet de mettre le doigt sur le problème à l'origine de cette discussion : dans la fonction apparait() tu utilisais Code :
document.form1.choix.checked Code :
document.form1.choix[i].checked Pour éviter d'avoir à gérer un indice de tableau dans cette fonction, je te suggère de modifier ta fonction (en reprenant la suggestion d'Andry, puisque tu n'as pas l'air convaincu ) :Code :
function apparait(obj)
{
document.getElementById('valid_select').disabled=obj.checked;
}
Code :
onclick="apparait(this);" A+ |
|
|
|
|
|
#16 |
![]() Date d'inscription: janvier 2007
Messages: 7 510
|
... et c'est quoi ces
Code :
<td><td>......</td></td>
J'espère que ce n'est qu'un problème de copier/coller ![]() A+ |
|
|
|
|
|
#17 | |||
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Citation:
Citation:
Code :
$compteur = "choix".$i++;
Citation:
Je connaissais pas cette cette syntaxe : disabled=obj.checked Comment fais-t'on pour récupérer la value ? Le but ultime est de récupérer la ou les value(s) des checkbox sélectionnées, d'ouvrir un popup pour modifier les entrées affichées dans la popup.
Dernière modification par arthuro45 ; 07/12/2009 à 11h02. |
|||
|
|
|
|
|
#18 | ||
![]() Date d'inscription: janvier 2007
Messages: 7 510
|
Citation:
Code :
function apparait(obj)
{
document.getElementById('valid_select').disabled=!obj.checked;
}
Citation:
Code :
obj.value;
![]() A+ |
||
|
|
|
|
|
#19 |
|
Membre habitué
![]() Date d'inscription: juillet 2009
Messages: 164
|
Merci pour votre aide.
J'ai fini par boucler sur les checkbox pour ne griser le bouton qu'a la condition que toutes les cases soient non cochées, avec mon niveau : Code :
function apparait(choix) { var total=""; for(var i=0; i < document.form1.choix.length; i++){ if(document.form1.choix[i].checked){ total +=document.form1.choix[i].value + "\n" } } if(total==""){ document.getElementById('valid_select').disabled=true; }else{ document.getElementById('valid_select').disabled=false; } } |
|
|
|
|
|
![]() |
||
Checkbox : Récupérer valeur si pas coché
|
||
| Outils de la discussion | |
|
|