Effacer un champ si checkbox est cochée

Résolu
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 - 26 mai 2010 à 17:23
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 - 12 juin 2010 à 18:59
Boujour à tous!

voila moi j'ai un formulaire généré par une boucle php, tant qu'il y a des noms dans une base de donnée mon formulaire s'allonge.
J'aimerais un bouton qui puisse effacer le contenu des champs de text qui sont checké..

Donc j'ai mes champs text dont les noms sont quoi1, quoi2, quoi3...
suivi des checkbox dont les noms sont toujours "choix" mais les values sont 1, 2, 3...

function effacer()
{
if (document.forms["planning"].elements["choix"].checked){
document.forms["planning"].elements["quoi[0]"].value = ""
}
}

<form name="planning">
$indice = 1;


$indice++;


</form>
(j'ai pas écris ici la boucle php car pas très utile..)

ca marche pô


Le pire c'est que si je fais un bouton sans passer par ma fonction, ca marche:


Si qqun à une idée :)
Merci d'avance

10 réponses

medabdeljalil Messages postés 2 Date d'inscription mardi 16 mars 2010 Statut Membre Dernière intervention 26 mai 2010
26 mai 2010 à 21:04
bonjour ???? voila le code corriger
<head>
<script language="javascript">
function effacer()
{
if (document.forms["planning"].elements["choix"].checked)
{
document.forms["planning"].elements["0"].value = "";
}
}</script></head>

<form name="planning">
<? $indice = 0; ?>
" VALUE="">
" />
<? $indice++; ?>




</form>
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
26 mai 2010 à 23:01
tout compte fait tu n'as pas besoin de mettre de NAME à tes CHECKBOXs. Je m'explique...
lors de l'appui sur le bouton tu parcours toutes les éléments de la FORM et si il est checked ALORS tu effaces l'INPUT dont le NAME est dans la value du CHECKBOX, c'est ce que l'on voit dans ton exemple.
Ta fonction Effacer est donc à modifier en conséquence.
;O)
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
26 mai 2010 à 19:03
Bonjour,
...checkbox dont les noms sont toujours "choix"...
ça c'est une vrai mauvaise idée, il te faut pour commencer des NAMEs différents pour tes CHECKBOXs...
;O)
0
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 3
27 mai 2010 à 20:42
RE hello les Loulous!

En fait en faisant:
function effacer()
{
if (document.forms["planning"].elements["choix"].checked)
{
document.forms["planning"].elements["0"].value = "";
}
}
ca marchait pas car il y a plusieurs checkbox qui s'appellent 'choix'
en ajoutant une checkbox toute seule avec un autre nom la fonction marche bien..

Alors j'ai mis:
if (document.forms["planning"].elements[5].checked)
je l'ai appelé par son indice en fait et ca marche nickel

Mais merci pour vos réponses rapides! Ché cool
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
28 mai 2010 à 19:08
Bonjour,
ta solution n'est valable que pour UN SEUL champ et non comme tu le souhaitais plusieurs...
J'aimerais un bouton qui puisse effacer le contenu des champs de text qui sont checké..


;O)
0
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 3
29 mai 2010 à 18:08
Coucou,

Oui j'avais pas vu tout de suite ce détail :/
j'essaie justement de modifier ma fonction pour que ca effaces l'INPUT dont le NAME est dans la value du CHECKBOX comme tu disais, mais je crois que je suis obligé de faire des NAME différents

Ce qui m'embête car en fait je suis obligé de les appeler toutes 'choix' car j'ai fait une autre fonction, ou il y a une checkbox qui coche toutes les autres (toutes celles qui ont name='choix')
voici cette fonction:
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
}
}
else{
for (var i=0; i<choix.length;i++){
choix[i].checked=false
}
}
}
else{
if (cas.checked){
choix.checked=true
}
else{
choix.checked=false
}
}
}

Comment je peux faire pour que les 2 fonctionne ensemble?

Merci pour ton aide en tout k!
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
29 mai 2010 à 22:05
Bonjour,
concernant ta fonction selectall, il est effectif qu'en passant par un name commun cela simplifie les choses, même si une fois cochés les données de ce cochés seront transmises par le submit.
Tu peux néanmoins simplifier ta function comme ceci
//------------------------
function selectall( this_){
  //-- Recup. reference de la FORM
  var O_Form = document.forms["planning"];
  //-- Recup etat de la CHECKBOX
  var bChecked = this_.checked;
  //-- Recup des elements CHECKBOX choix
  var O_Check = O_Form.elements['choix'];
  //-- Affecte etat aux elements CHECKBOX choix
  for( var i =0; i < O_Check.length; i++) {
    O_Check[i].checked = bChecked;
  }
}
avec un appel du type



maintenant dans le même style tu peux avoir une fonction efface qui pourrait ressembler à cela
//----------------
function effacer(){
  //-- Recup. reference de la FORM
  var O_Form = document.forms["planning"];
  //-- Recup des elements CHECKBOX choix
  var O_Check = O_Form.elements['choix'];
  //-- Parcours pour effacement
  for( var i =0; i < O_Check.length; i++){
    //-- Si checkbox coche
    if( O_Check[i].checked){
      //-- Recup. du name dans la value
      var szId = O_Check[i].value;
      //-- Efface l'input correspondant
      O_Form.elements[szId].value = "";
    }
  }
}

voila une façon de procéder...
;O)
0
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 3
30 mai 2010 à 11:33
Re Salut!

merci pour ton implication! :)

que veut dire exactement for( var i =0; i < O_Check.length; i++) dans la fonction effacer?

la fonction selectall marche nickel, mais pas effacer :(
et du coup je trouve pas l'erreur..

mais sinon tant pis, ne te prend pas trop la tête, je vais pas mettre cette fonction, je fini mon site et j'y reviendrai + tard..
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
12 juin 2010 à 18:09
Bonjour,
en mettant de l'ordre je retombe sur ce zappage complet, 1000 EXCUSES

que veut dire exactement for( var i =0; i < O_Check.length; i++) dans la fonction effacer?
O_Ckeck contient une liste de TOUS les éléments choix
O_Check.length représente la longueur de cette liste, donc on parcours tous les éléments, sachant qu'un tableau démarre à l'indice 0.

la fonction selectall marche nickel, mais pas effacer
je viens de reprendre le code et je n'ai pas de problème !!!!

;O)
0
mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 3
12 juin 2010 à 18:59
Tchô!

c'est tout bon ca marche bien :)

merci en tout k!
A++
0
Rejoignez-nous