focus sur la saisie texte si case cochée

Eléphant du PHP | 89 Messages

26 janv. 2006, 14:18

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 15:57

que donne le code source concernant cette partie ?

le nom du formulaire est bien "general" ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 89 Messages

26 janv. 2006, 16:20

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 !!!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 16:40

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 89 Messages

26 janv. 2006, 17:04

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 ....

Eléphant du PHP | 89 Messages

26 janv. 2006, 17:19

ne faite pas attention au nom de la fonction, il n'y a pas d'erreur sur le nom dans mon programme ils correspondent!!!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 17:26

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 ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 89 Messages

26 janv. 2006, 18:10

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 18:36

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 !

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 89 Messages

26 janv. 2006, 19:19

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???

Mammouth du PHP | 19672 Messages

26 janv. 2006, 19:25

utilise l'évènement onload dans la balise body ? :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 21:45

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)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

26 janv. 2006, 22:43

... "readOnly" (attention à la majuscule)
En HTML 4 c'est vrai, mais en XHTML, tout en minuscule obligatoire ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2006, 23:08

... "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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

26 janv. 2006, 23:19

Peut-être parce qu'il manque une ou deux paires d'apostroh=phes ?
window.document.forms['general'].elements['leCalk'].readOnly = 'false';
:?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: