Page 1 sur 2

focus sur la saisie texte si case cochée

Posté : 26 janv. 2006, 14:18
par shen
bonjour,
voici mon code qui marche mais lorsque je l'intègre dans mon programme ça veut pas marcher!!!
<html>
<head>
<title>Untitled</title>
<script language="JavaScript">

function montrer_cacher(laCase,leCalk)
{
    if (laCase.checked) //la case est cochée -> on montre le calque
    {
        window.document.forms['general'].elements[leCalk].disabled = false;

        //document.getElementById(leCalk).style.visibility="visible";
        
    }
    else //la case n'est pas cochée -> on cache le calque
    {
	window.document.forms['general'].elements[leCalk].disabled = true;

        //document.getElementById(leCalk).style.visibility="hidden";
    }
}
</script>
</head>


<body>
<form action="test2" method="post" name="test" id="id_test">
<input type="checkbox" name="check" onClick="montrer_cacher(this,'cluster')">
du texte :<input type="text" name="texte" ID="cluster" value="" />

</table>
</form>
</body>
</html>
alors ce que je souhaite faire c'est mettre des case à cocher dans mon tableau résulats pour pouvoir les sélectionner pour réimprimer le fichier mais je souhaite indique s'ilya besoin la page à laquel la réimpression doit commencer et donc pouvoir mettre un numéro de page uniquement si la case est sélectionnée.

je mets donc la premiere partie de mon code dans <head></head> : en fait j'ai mis cette fonction dans un fichier focustext.php que je fais appel dans mon programme principale.
<HTML> 
<HEAD> 

<script language="JavaScript">
require('focustext.php');//fichier contenant uniquement la fonction
</script>

</HEAD>
puis le reste je le met dans la cellule de mon tableau ou je veux afficher ma case à cocher et la saisie texte. Elle se situe dans une boucle pour pouvoir récupérer tous les résultats avec une requete sur ma base de données.

while(!$result->EOF) 
	{
		printf("<tr>\n");
		for ($i=0; $i<$nbchps; $i++)
		{
                  :
                  :
                  :
                  elseif ($i==9)
			{
				printf("<td><center><INPUT type='checkbox' name='cocher[]' VALUE=%d onClick=".$sep."montrer_cacher(this,'premp')".$sep."></center>",$result->fields[0]);
				printf("<center>num page :<INPUT type='test' name='prempage' id='premp' size='3'></center></td>");
			}	

voilà ben je ne comprends pas pourquoi ça ne marche pas, je ne vois pas l'erreur dans mes emplacement de bout de programme!!!
Pouvez vous m'aider???
j'espere que je suis assez précise dans mes explications??

Merci

Posté : 26 janv. 2006, 15:57
par Truc
que donne le code source concernant cette partie ?

le nom du formulaire est bien "general" ?

Posté : 26 janv. 2006, 16:20
par shen
oui j'ai bien vérifié le form a bien comme id 'general'!!!

sinon tu parle de quelle partie ???

alors dans mon premier code de mon 1er post (les deux parties réunies c'est à dire javascript + checkbox et input), il me fait bien grisé la partie saisie texte quand la case n'est pas coché!!! sauf à l'ouverture de la page!!!

sinon une fois intégré à mon programme, sa me donne le focus sur le saisi text que la case soit coché ou non !!!

Posté : 26 janv. 2006, 16:40
par Truc
sinon tu parle de quelle partie ???
celle-ci:
 elseif ($i==9)
            {
                printf("<td><center><INPUT type='checkbox' name='cocher[]' VALUE=%d onClick=".$sep."montrer_cacher(this,'premp')".$sep."></center>",$result->fields[0]);
                printf("<center>num page :<INPUT type='test' name='prempage' id='premp' size='3'></center></td>");
            }
à quoi correspond $sep ?

teste les valeurs dans la fonction en les affichant avec:
alert("case cochée: "+laCase.checked+" élément a cacher "+leCalk);
pour verifier si les valeurs passent bien

Posté : 26 janv. 2006, 17:04
par shen
alors $sep = ' " '; pour permettre de mettre des double guillemet sans confusion avec d'autre et les guillemet simple!!!

j'ai mis l'alert dans ma fonction :
function focusSur(laCase,leCalk)
{
    if (laCase.checked) //la case est cochée -> on montre le calque
    {
    	alert('case cochée: '+laCase.checked+' élément a cacher '+leCalk);
        window.document.forms['general'].elements[leCalk].disabled = false;

        //document.getElementById(leCalk).style.visibility="visible";
    }
    else //la case n'est pas cochée -> on cache le calque
    {
	window.document.forms['general'].elements[leCalk].disabled = true;

        //document.getElementById(leCalk).style.visibility="hidden";
    }
}
c'est bien ça??? quand je coche ça ne me donne pas d'alert!!!


sinon j'avais testé le code intégré à mon programme mais sans le mettre dans la boucle en dehors juste après <body> mais entre <?php ?> et sa marchait toujours puis je l'ai mis en plus dans ma boucle, alors le résulat c'est que quand je cochais les case de mon tableau cela controlais la saisie texte qui se situe endehors de la boucle. c'est très bizarre non???

je ne sais pas ....

Posté : 26 janv. 2006, 17:19
par shen
ne faite pas attention au nom de la fonction, il n'y a pas d'erreur sur le nom dans mon programme ils correspondent!!!

Posté : 26 janv. 2006, 17:26
par Truc
alors $sep = ' " '; pour permettre de mettre des double guillemet sans confusion avec d'autre et les guillemet simple!!!
inutile, pour éviter la "confusion" on y ajoute un \ qui échape le guillemet:
" <input ... onClick="montrer_cacher(this,'premp')" >"
j'ai mis l'alert dans ma fonction :
(...)
c'est bien ça??? quand je coche ça ne me donne pas d'alert!!!
oui, fait la même chose avant le 1er test, donc en 1ere ligne de la fonction.

mais tu n'as qu'une case à cocher qui influe sur le champ "id='premp'" qui est unique me semble bien puisque tu affiche cette partie que si $i == 9 donc une seule fois.

As tu regardé le code source qui correspond à ces lignes et nottament à cette case a cochée et champ texte ?

Posté : 26 janv. 2006, 18:10
par shen
mais tu n'as qu'une case à cocher qui influe sur le champ "id='premp'" qui est unique me semble bien puisque tu affiche cette partie que si $i == 9 donc une seule fois.
en fait non il y a plusieurs ligne de résultats donc une case à cocher à chaque ligne, le nombre 9 correspond à la colonne de mon tableau

Posté : 26 janv. 2006, 18:36
par Truc
si je te dis code source tu sais de quoi je veux parler ?

enfin le probleme vient certainement du faite que tu as des champs portant le même nom du à la boucle,essaie avec ce code:
$j=0;
while(!$result->EOF)
{
        printf("<tr>\n");
        for ($i=0; $i<$nbchps; $i++)
        {
                  :
                  :
                  :
                  elseif ($i==9)
            {
                echo "<td><center><INPUT type='checkbox' name='cocher[]' VALUE=".$result->fields[0]."  onClick=\"montrer_cacher(this,'premp".$j."')\"></center>";
                printf("<center>num page :<INPUT type='test' name='prempage".$j."' id='premp".$j."' size='3'></center></td>");
            }
        }
        j++;
}
avec des id différents !

Posté : 26 janv. 2006, 19:19
par shen
c'est super merci ça marche parfaitement sauf un petit détail, c'est que à l'affichage de la page je peux ecrire dans le saisi text, je dois faire un premier clic pour déclancher le mécanisme!!!
comment faire pour que sa soit des l'affichage???

Posté : 26 janv. 2006, 19:25
par Cyrano
utilise l'évènement onload dans la balise body ? :-k

Posté : 26 janv. 2006, 21:45
par Truc
peut être en ajoutant l'attribut "disabled" par défaut au champ en question:
printf("<center>num page :<INPUT type='test' name='prempage".$j."' id='premp".$j."' size='3' disabled=\"disabled\"></center></td>");
Par contre faudrait verifier si la valeur est toujours envoyée :-k

si elle n'est pas envoyée donc ne peut être récupérée en POST il faut changer tous les "disabled" en "readOnly" (attention à la majuscule)

Posté : 26 janv. 2006, 22:43
par Cyrano
... "readOnly" (attention à la majuscule)
En HTML 4 c'est vrai, mais en XHTML, tout en minuscule obligatoire ;)

Posté : 26 janv. 2006, 23:08
par Truc
... "readOnly" (attention à la majuscule)
En HTML 4 c'est vrai, mais en XHTML, tout en minuscule obligatoire ;)
Exact chef 8)

je parlais surtout pour le JS:
window.document.forms['general'].elements[leCalk].readOnly = false;
sinon va savoir pourquoi ça ne fonctionne pas :-k

Posté : 26 janv. 2006, 23:19
par Cyrano
Peut-être parce qu'il manque une ou deux paires d'apostroh=phes ?
window.document.forms['general'].elements['leCalk'].readOnly = 'false';
:?: