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

JavaScript Discussion :

document.getElementById('code').disabled = true;


Sujet :

JavaScript

  1. #1
    Inscrit
    Inscrit en
    Février 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 93
    Points : 96
    Points
    96
    Par défaut document.getElementById('code').disabled = true;
    Hello,

    J'ai fait une page de contact sur mon site avec un captcha pour éviter le spam. Vous pouvez voir cette page ici...

    Tout fonctionne si vous désactivez le javascript de votre navigateur: si le code tapé est faux ou que l'un des champs reste vide, vous obtenez un message d'erreur.

    J'ai voulu optimiser la page avec un peu de javascript mais ça fait foirer la page... Vous pouvez tester avec le javascript activé sur votre navigateur: même si vous remplissez tous les champs et que vous saisissez le bon code du captcha, vous vous faites jeter...

    Avec ça en tout cas je suis sûr de pas être dérangé par du spam

    Le code Ajax est le suivant:
    Code Javascript : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    function test_captcha()
    {
    	getXhr(); 
    	xhr.onreadystatechange = function()
    	{ 
    		if (xhr.readyState == 4 && xhr.status == 200)
    		{
    			var reponse=xhr.responseText;
    			if (reponse == 'false')
    			{
    				document.getElementById('bad_code').style.display='none';
    				document.getElementById('good_code').style.display='block';
    				document.getElementById('code').disabled = true;
    				document.getElementById('validation').disabled = false;
    				document.getElementById('captcha_reload').style.display='none';
    				document.getElementById("erreur_captcha").innerHTML = '';
    			}
    			else
    			{
    				if (valeur.length < 1)
    				{
    					document.getElementById("erreur_captcha").innerHTML = '';
    				}
    				else
    				{
    					document.getElementById("erreur_captcha").innerHTML = reponse;
    				}
    			}
    			//faire les tests de validation ;)
    		}
    	}
    	var valeur;
    	valeur=document.getElementById('code').value
    	xhr.open("POST",'includes/functions/php/test_captcha.php',true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send("valeur="+valeur);
    }

    Si je vire cette ligne:
    document.getElementById('code').disabled = true;
    ça résoud partiellement le problème: si on complète tous les champs et que l'on indique le code correct, les données sont enregistrées dans la base...

    Sauf que j'aimerais que lorsque l'on a donné le code correct, le champs de saisie du captcha devienne inactif pour qu'on ne puisse plus modifier le code saisi, d'où l'utilité de la ligne
    document.getElementById('code').disabled = true;

    Le problème c'est qu'apparemment le fait de désactiver le champs de saisie fait que ce champs en perd la mémoire et ne transmet plus les données qu'il contient puisqu'en affichant le contenu de sa mémoire en dessous du message d'erreur, je m'aperçois qu'il est alors vide.

    Est ce que quelqu'un aurait une idée pour résoudre le problème et avoir à la fois un formulaire qui fonctionne et n'enregistre les données que si on saisit tout le formulaire et si on copie exactement le code demandé, mais avoir également le champs de saisie du captcha qui se désactive au moment où on a tapé le captcha correct pour qu'on ne puisse plus rien modifier... mais que ce champs de saisie que j'ai appelé "code" transmette quand même les données...?

    Merci

  2. #2
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut
    Bonjour,

    Essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById('code').setAttribute('readonly', 'readonly');

  3. #3
    Inscrit
    Inscrit en
    Février 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 93
    Points : 96
    Points
    96
    Par défaut
    Magnifique! Ca résoud tout à fait le problème... Merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. getElementById disabled true
    Par CoudJM dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/07/2012, 09h26
  2. document.getElementById(id) si id est absent du code HTML
    Par j.p.mignot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/01/2008, 21h34
  3. document.getElementById() has no properties ..
    Par ahage4x4 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/06/2005, 17h04
  4. This.value au lieu de document.getElementById('field').value
    Par yoyot dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/03/2005, 14h02
  5. [C#] Generation Document du code
    Par MALAGASY dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/01/2005, 13h46

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