IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Probleme input hidden et getElementById().value


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Probleme input hidden et getElementById().value
    Bonjour à tous,

    J'ai un ptit probleme qui me rend complément ouf

    explication : je veux récuperer la position du scroll de l'utilisateur, la mettre dans un champs input hidden d'un formulaire pour récupérer la variable post dans mon fichier de gestion de formulaires et pouvoir ainsi renvoyer l'utilisateur à la position où il se trouvait avant de soumettre le formulaire.

    Voilà comment je my prends (le code est simplifié) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /*fichier contenant le form*/
    <script type="text/javascript">
    	function meuh(qdqdqsdq)
    	{
    		alert(document.getElementById('positionScroll').value);//=>affiche 333(valeur par defaut)
    		var posScroll = document.documentElement.scrollTop;
    		document.getElementById('positionScroll').value=posScroll;
    		alert(document.getElementById('positionScroll').value);//=>affiche la position du scroll courante (en gros ca marche bien)
    		qdqdqsdq.form.submit();
    	}
    </script>
     
    <form method="post" action="index.php?...blablabla" name="formCoordonneesModifier">
     
    	<p>
    		<input type="hidden" name="positionScroll" id="positionScroll" value="333" />
    	</p>
    	<div class="formBoutonModifier">
    		<input class="bouton" type="button" onclick="meuh(this);return false;" value="Modifier" />
    	</div>
    </form>


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*fichier de recuperation des variables POST*/
    <?php
    	//position du scroll
    	if(!empty($_POST['positionScroll'])){$positionScroll=htmlspecialchars($_POST['positionScroll']);}else{$positionScroll=0;}
     
    	echo $positionScroll;//=> affiche 333 (la valeur par defaut dans le input hidden...)
     
    	//placement de la fenetre en fonction du scroll précédent de l'utilisateur(ca marche c'est bon)
    	?><script type="text/javascript">$(document).ready(function (){window.scrollTo(0,<?php echo $positionScroll;?>);});</script><?php
    ?>
    Bref on dirait que le formulaire est soumis avant que la modif du input hidden soit effective, meme avec un return:false sur le onclick...

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Il faut enlever les inputs de type submit de ton formulaire et mettre un boutton type button avec en onclick ton traitement sur l'input hidden et ensuite la soumission du formulaire.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Il faut enlever les inputs de type submit de ton formulaire et mettre un boutton type button avec en onclick ton traitement sur l'input hidden et ensuite la soumission du formulaire.
    Merci pour cette réponse très rapide mais il semble que c'est déjà ce que j'ai fais nan ?

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je viens de faire tourner ton bout de code et la valeur de positionScroll à bien été changée à 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Paramètresapplication/x-www-form-urlencoded
    positionScroll	0
    Source
    Content-Type: application/x-www-form-urlencoded Content-Length: 16 positionScroll=0
    Je te recommande l'usage de Web Developper Toolbar et de FireBug pour Firefox afin d'identifier les comportements de tes pages.

    Par ailleurs
    explication : je veux récuperer la position du scroll de l'utilisateur, la mettre dans un champs input hidden d'un formulaire pour récupérer la variable post dans mon fichier de gestion de formulaires et pouvoir ainsi renvoyer l'utilisateur à la position où il se trouvait avant de soumettre le formulaire.
    Pourquoi ne pas utiliser les ancres ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Je viens de faire tourner ton bout de code et la valeur de positionScroll à bien été changée à 0.
    Oui ca marche sans soucis, le probleme est que cette modif n'est pas retenue lors de l'envoi du formulaire.

    Citation Envoyé par Benjamin Delespierre Voir le message
    Pourquoi ne pas utiliser les ancres ?
    J'y ai pensé mais je veux que le scroll revienne au pixel près lors du rechargement de la page.

    J'espere avoir été plus clair, et merci pour les réponses

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    C'est ta vérification qui est en cause:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!empty($_POST['positionScroll']))
    Alors que dans l'exemple que j'ai fait tourner, $_POST['positionScroll'] vaut 0 et est donc considéré comme vide.
    Il faut utiliser la clause isset à la place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_POST['positionScroll']) && $_POST['positionScroll'] !== "")
    -- Edit

    Au passage puisque tu veux un repositionnement au pixel près et quite à utiliser JavaScript, pourquoi ne pas soumettre le formulaire via Ajax ? Ainsi l'utilisateur ne change pas de page et son scroll reste inchangé.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    C'est ta vérification qui est en cause:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!empty($_POST['positionScroll']))
    Alors que dans l'exemple que j'ai fait tourner, $_POST['positionScroll'] vaut 0 et est donc considéré comme vide.
    Il faut utiliser la clause isset à la place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_POST['positionScroll']) && $_POST['positionScroll'] !== "")
    j'ai fais un echo $_POST['positionScroll']; pour verifier, il m'affiche 333 quelle que soit la position verticale de la page quand je clique sur mon bouton. Je ne l'ai pas mentionné, mais mon formulaire s'ouvre dans une fenetre interne de type lightbox quand je clique sur un bouton (par ex "modifier")

    Citation Envoyé par Benjamin Delespierre Voir le message
    Au passage puisque tu veux un repositionnement au pixel près et quite à utiliser JavaScript, pourquoi ne pas soumettre le formulaire via Ajax ? Ainsi l'utilisateur ne change pas de page et son scroll reste inchangé.
    Je ne doute pas que ce soit la meilleure solution, mais mon appli est deja codée (~5000 lignes) et en plus j'y connais rien (ou presque) en AJAX , ce que je veux ajouter ici est une fonctionnalité purement pratique pour l'utilisateur, il n'a pas besoin de rescroller pour revenir où il était.

    Bref je suis cuit c'est ca ? Merci pour la réponse

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
     
    var_dump($_REQUEST['positionScroll']);
     
    ?>
    <script type="text/javascript">
    	function meuh(qdqdqsdq)
    	{
    		alert(document.getElementById('positionScroll').value);//=>affiche 333(valeur par defaut)
    		var posScroll = document.documentElement.scrollTop;
    		document.getElementById('positionScroll').value=posScroll;
    		alert(document.getElementById('positionScroll').value);//=>affiche la position du scroll courante (en gros ca marche bien)
    		qdqdqsdq.form.submit();
    	}
    </script>
     
    <form method="post" name="formCoordonneesModifier">								
    	<p>
    		<input type="hidden" name="positionScroll" id="positionScroll" value="333" />
    	</p>
    	<div class="formBoutonModifier">
    		<input class="bouton" type="button" onclick="meuh(this);return false;" value="Modifier" />
    	</div>
    </form>
    Ce bout de code prouve que le fonctionnement est correct sur Firefox. Je pense que ton JS ne doit pas fonctionner correctement sur IE. Je n'ai pas assez de compétences en JS pour l'affirmer mais tu devrais regarder de ce coté là.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Mais je suis sous firefox

    Bref comme me dit un pote, je vais passer cette variable en cookie, tanpis

    edit1 : j'ai jamais dit qu'il y avait une erreur dans le code, ce code marche même si c'est pas jolie (de toute facon je modifierai :p). C'est le fonctionnement qui est bizarre, pourquoi se borne t il à envoyer la valeur de base (333) du input:hidden ?

    edit2 : probleme résolu en utilisant les cookies, dommage mais pas plus mal bien que ca ne fait que bypasser le probleme de départ, je ne marque donc pas ce sujet comme résolu.

    Merci pour ton aide Benjamin

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
     
    var_dump($_REQUEST['positionScroll']);
     
    ?>
    <script type="text/javascript">
    	function meuh(qdqdqsdq)
    	{
    		alert(document.getElementById('positionScroll').value);//=>affiche 333(valeur par defaut)
    		var posScroll = document.documentElement.scrollTop;
    		document.getElementById('positionScroll').value=posScroll;
    		alert(document.getElementById('positionScroll').value);//=>affiche la position du scroll courante (en gros ca marche bien)
    		qdqdqsdq.form.submit();
    	}
    </script>
     
    <form method="post" name="formCoordonneesModifier">								
    	<p>
    		<input type="hidden" name="positionScroll" id="positionScroll" value="333" />
    	</p>
    	<div class="formBoutonModifier">
    		<input class="bouton" type="button" onclick="meuh(this);return false;" value="Modifier" />
    	</div>
    </form>
    Je vais peut être dire n'importe quoi, mais ça me semble logique que ta page affiche tout le temps 333 puisque tu met une value à ton hidden. La c'est ton js qui gère la value donc tu devrais en mettre une vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="positionScroll" id="positionScroll" value="" />

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Clad3815 Voir le message
    Je vais peut être dire n'importe quoi, mais ça me semble logique que ta page affiche tout le temps 333 puisque tu met une value à ton hidden. La c'est ton js qui gère la value donc tu devrais en mettre une vide
    C'est ce que j'avais fait au départ, j'ai mis 333 pour avoir une valeur de test. Dans les 2 cas, le comportement est le même.

Discussions similaires

  1. pass input Hidden value comme variable dans HREF
    Par windows2056 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 04/10/2013, 13h51
  2. inclure GetElementById dans un input hidden
    Par mikl86 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/11/2012, 13h40
  3. [DOM] Passage de valeur dans input via getElementById().value
    Par Invité dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/07/2008, 21h47
  4. problemes input texte
    Par Shadow69 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 15/02/2006, 03h56
  5. Problème d'installation (Bad EIP value)
    Par Bensor dans le forum Administration système
    Réponses: 7
    Dernier message: 14/11/2004, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo