11548 sujets

JavaScript, DOM et API Web HTML5

Bon, je suis toujours avec mon formulaire...

La page test : http://www.yuimen.com/lothindil/inscription-test.php

(pas sur que ça vous aide, le code source est un joyeux boxon)

Mon concept c'est de faire un formulaire dynamique comprenant 5 étapes distinctes et visuelles. Pour la première étape (création du compte), l'utilisateur doit remplir un morceau du formulaire comprenant plusieurs champs. Jusque là, pas trop de problème.
Une fois cela fait, il clique sur 'étape suivante' qui affiche la première étape de la création du personnage. Ce n'est pas un submit en tant que tel (pas de changements de page), juste une pré-validation javascript et ajax.

Mon problème est assez simple : l'évènement "click" marche très bien la première fois. Mais quand l'utilisateur fait une erreur, j'affiche les erreurs sans toucher au formulaire (ça marche aussi)... à part que l'évènement "click" ne marche plus, ce qui fait que l'utilisateur ne peut pas re-valider son étape du formulaire.

Code HTML de cette partie-là :

<div id='formulaire1' style='display:block'>
	<span id='err_login'></span>
	<span id='err_pass'></span>
	<span id='err_mail'></span>
	<span id='err_parrain'></span>
	<p><label for='login'>Login : </label><input class='champtxt' type='text' id='login' /></p>
	<p><label for='password'>Mot de passe : </label><input class='champtxt' type='password' id='password' /></p>
	<p><label for='pass2'>Retaper votre mot de passe : </label><input class='champtxt' type='password' id='pass2' /></p>
	<p><label for='email'>E-mail : </label><input class='champtxt' type='text' id='email' /></p>
	<p><label for='parrain'>Parrain : </label><input class='champtxt' type='text' id='parrain' value=''/></p>
	<p id='valid1'>Aller à l'étape suivante ! <img src='images/flecheEst.gif' title='Etape suivante' alt='Etape suivante' /></p>
</div>


Mon code Jquery (pour ce bout-là) :

$('#valid1').click
(
	function () 
	{
		var erreur=0;
		var login=$('#login').val();
		var pass=$('#password').val();
		var pass2=$('#pass2').val();
		var email=$('#email').val();
		var alphanum = new RegExp(/([^A-Za-z0-9_ \-])/);
		if(login=='')
		{
			erreur=1;
			$("#err_login").html("<p>Vous devez inscrire un login.</p>");
		}
		else if (alphanum.test (login)) 
		{
			erreur=1;
			$("#err_login").html("<p>Vous ne pouvez utiliser que des caractères alpha-numériques, des -, des espaces et des - dans le login.</p>");
		}
		if(pass=='')
		{
			erreur=1;
			$("#err_pass").html("<p>Vous devez inscrire un mot de passe.</p>");
		}
		else if(pass2=='')
		{
			erreur=1;
			$('#err_pass').html("<p>Vous devez ré-inscrire votre mot de passe.</p>");
		}
		else if($pass2!=pass)
		{
			erreur=1;
			$('#err_pass').html("<p>Les deux mots de pass doivent être identique (faite attention aux majuscules)</p>");
		}
		if(email=='')
		{
			erreur=1;
			$('#err_mail').html('<p>Vous devez inscrire un email (celui-ci ne servira que pour la récupération du password).</p>');
		}
		if(erreur==0)
		{
			$('#formulaire2').show();
			$('#formulaire1').hide();
			$("#haut").html("Création de votre personnage");
		}
	}
);

Modifié par Lothindil (14 May 2012 - 15:57)
Bonjour,
Chez moi la fonction click marche plusieurs fois.
Toutefois, les erreurs de login et mail apparaissent la première fois qu'ils contiennent une erreur respective et ne disparaissent jamais (normal, tu ne les vide pas).
La seule erreur qui se met à jour, est celle pour le mot de passe, car il y a plusieurs erreurs possibles, et par conséquent le contenu est remplacé.

Sinon voilà... ca marche...
Hello Lothindil,

tout d'abord, pas de <p> pour tes formulaires ni dans tes <span> ! Et utilise un <button> pour ton bouton ! Smiley smile

Ensuite, je remarque que tu ne fais pas de
event.preventDefault();
ou de
return false;
...mais vu que c'est un <p> c'est +/- logique !

Ton bouton est-il toujours le #valid1 ?

A quoi ressemble ton 2ème formulaire ?

As-tu une erreur Javascript ?
Gothor a écrit :
Bonjour,
Chez moi la fonction click marche plusieurs fois.
Toutefois, les erreurs de login et mail apparaissent la première fois qu'ils contiennent une erreur respective et ne disparaissent jamais (normal, tu ne les vide pas).
La seule erreur qui se met à jour, est celle pour le mot de passe, car il y a plusieurs erreurs possibles, et par conséquent le contenu est remplacé.

Sinon voilà... ca marche...

Oui, je vais les vider, c'est prévu ^^ (pas encore fait...)

Par contre, c'est louche que ça marche chez toi et pas chez moi...


@Monkey_monk :
Pourquoi pas de <p> ?

Et non, je ne vais pas transformer mon texte en bouton, ce n'est pas un bouton, mais plutôt un lien vers la suite. (Et je sais, faudrait un <a> dans ce cas-là, mais ça m'importe franchement pas du tout, mon formulaire n'a pas pour vocation d'être accessible)


Et mon bouton n'est pas toujours le #valid1, mais il l'est pour la première partie ^^ (pour la suite, ce sont des images à cliquer ^^


Et non aucune erreur javascript.




Et mon second "formulaire" ressemble à ça :

<div id='formulaire2' style='display:none'>
	<input type='hidden' id='genre' value='' />
	<h2>Choisir le sexe de votre personnage !</h2>
	<p>Le sexe de votre personnage pourra changer légèrement le scénario, mais ne procure aucun avantage en matière de gameplay.</p>
	<p class='centrer'>
		<img id='femme' src='skin/pj/inscription/femme.png' title='Femme' alt='Femme' />&nbsp;&nbsp;&nbsp;
		<img id='homme' src='skin/pj/inscription/homme.png' title='Homme' Alt='Homme' />
	</p>
</div>

Modifié par Lothindil (14 May 2012 - 15:31)
Modérateur
Bonjour! moi j'ai une erreur javascript:
else if($pass2!=pass)

$pass2 est indéfini…

Sinon de manière plus globale, la structure n'est pas top, cela rend complètement dépendant au js alors que cela ne donne aucun avantage…
kustolovic a écrit :
Bonjour! moi j'ai une erreur javascript:
else if($pass2!=pass)

$pass2 est indéfini…

Sinon de manière plus globale, la structure n'est pas top, cela rend complètement dépendant au js alors que cela ne donne aucun avantage…

Ca donne un avantage qui est d'éviter de recharger la page tout en ayant un formulaire dynamique pour la suite.

Et oui ça rend dépendant au js, et honnêtement, vu ma cible, c'est absolument pas un soucis. Smiley ravi


Et pour l'erreur, ça m'apprendra à passer du php au javascript, j'ai une sale tendance à laisser des $ devant des variables dans mes js. Smiley biggol



Sinon le problème, pour une raison que j'ignore totalement s'est résolu tout seul chez moi... (*je cherche pas à comprendre*)
Modifié par Lothindil (14 May 2012 - 15:33)
kustolovic a écrit :
else if($pass2!=pass)

$pass2 est indéfini…
J'ai réussi (ahah...) à avoir la même erreur tout à l'heure, mais je n'ai pas réussi à la reproduire...
Gothor a écrit :
J'ai réussi (ahah...) à avoir la même erreur tout à l'heure, mais je n'ai pas réussi à la reproduire...

Suffit d'avoir 2 pass différents, mais avec un texte Smiley cligne

bon, c'est corrigé ^^
Modérateur
Si si, c'est un souci, la preuve. Une petite erreur javascript, sur ton formulaire ou ailleurs sur ta page et plus rien ne fonctionne.

Une solution simple serait de faire un formulaire html basique, avec validation serveur. Ensuite tu peux ajouter une surcouche de validation javascript, et si vraiment ça apporte quelque chose, soumettre en modifier en ajax.

Après tout faire en javascript ça demande d'être très méticuleux et organisé, et d'avoir une structure solide et bien pensée. Ce qui est loin d'être le cas.
kustolovic a écrit :
Si si, c'est un souci, la preuve. Une petite erreur javascript, sur ton formulaire ou ailleurs sur ta page et plus rien ne fonctionne.

Une solution simple serait de faire un formulaire html basique, avec validation serveur. Ensuite tu peux ajouter une surcouche de validation javascript, et si vraiment ça apporte quelque chose, soumettre en modifier en ajax.

Après tout faire en javascript ça demande d'être très méticuleux et organisé, et d'avoir une structure solide et bien pensée. Ce qui est loin d'être le cas.

A part que ton formulaire html basique, il ne permet pas que l'utilisateur en arrivant sur la page d'inscription n'ai pas 3000 champs à remplir directement qui lui saute à la tronche (je perds à mon avis dans les 20% d'utilisateurs juste sur l'arrivée à la page d'inscription).

Puis il ne permet pas, à ma connaissance, de pouvoir faire un formulaire graphique comme c'est le cas de toute la seconde partie qui fonctionne sur le principe d'un arbre à choix :
- tu choisis le sexe de ton personnage entre 2 images représentant les 2 choix
- ce clic dévoile alors un lot de 8 images représentant les 8 races du jeu. Ces images tiennent compte du choix fait sur le sexe.
- le clic de choix de la race dévoile un lot de 7 images représentant les 7 classes du jeu. Ces images tiennent compte des 2 choix fait précédemment.

Hors, sur un jeu, l'aspect graphique est primordial et un simple jeu de show et de hide comme il est prévu apporte un réel plus à l'inscription et me fait gagner des joueurs (ou plutôt évite de m'en faire perdre).

Et le coté "oui, mais si les gens n'ont pas le javascript" est à oublier totalement sur la cible d'un jeu. Si quelqu'un n'a pas le javascript, il n'aura pas accès à une bonne partie des fonctions du jeu de toute façon et partira par la suite.

Et y aura une validation serveur , une prévalidation javascript n'empêche pas une validation serveur ^^


edit : et c'est à moi de bosser pour qu'il n'y ait pas d'erreur javascript. Le projet n'est pas urgent de toute façon ^^
Modifié par Lothindil (14 May 2012 - 15:46)
Modérateur
Lothindil a écrit :

A part que ton formulaire html basique, il ne permet pas que l'utilisateur en arrivant sur la page d'inscription n'ai pas 3000 champs à remplir directement qui lui saute à la tronche (je perds à mon avis dans les 20% d'utilisateurs juste sur l'arrivée à la page d'inscription).

Rien n'empêche de faire un formulaire par étapes. Je n'ai jamais dit le contraire, l'intérêt est évident.

Lothindil a écrit :

Puis il ne permet pas, à ma connaissance, de pouvoir faire un formulaire graphique comme c'est le cas de toute la seconde partie qui fonctionne sur le principe d'un arbre à choix :
- tu choisis le sexe de ton personnage entre 2 images représentant les 2 choix
- ce clic dévoile alors un lot de 8 images représentant les 8 races du jeu. Ces images tiennent compte du choix fait sur le sexe.
- le clic de choix de la race dévoile un lot de 7 images représentant les 7 classes du jeu. Ces images tiennent compte des 2 choix fait précédemment.

J'ai pas encore réussi à passer sur la seconde page ^^. Mais là bien sûr tu as besoin de js. Mais en séparant bien sur plusieures pages, tu évites les risques du très gros code js qui fait tout, ainsi que les erreurs qui vont avec.

Lothindil a écrit :
Hors, sur un jeu, l'aspect graphique est primordial et un simple jeu de show et de hide comme il est prévu apporte un réel plus à l'inscription et me fait gagner des joueurs (ou plutôt évite de m'en faire perdre).

C'est plutôt le gameplay qui est important, surtout dans un jeu avec un aspect graphique super-nintendo… de même tes potientels joueurs seront plus attentifs au fait que ça marche super efficacement que des blings blings visuels et des bugs à l'inscription…

Lothindil a écrit :
Et le coté &quot;oui, mais si les gens n'ont pas le javascript&quot; est à oublier totalement sur la cible d'un jeu. Si quelqu'un n'a pas le javascript, il n'aura pas accès à une bonne partie des fonctions du jeu de toute façon et partira par la suite.

Pas de problèmes avec ça Smiley langue

Mais de bosser fonctionnel d'abord, plus classique, moins javascript, et ensuite àmélioration de l'interface, de la saisie, etc. permet de rester plus propre et bien conçu
Je comprends bien ton point de vue mais le fait de bien utiliser l'HTML/CSS/Javascript ne sert pas que pour les questions d'accessibilité !

A partir du moment où tu utilises les bons éléments pour les bonnes choses, tu évites 80% des bugs ! Smiley cligne Et j'en sais quelque chose !! Depuis que je fais ch*** le monde pour bien utiliser l'HTML, je passe moins de temps a tout refaire ! Smiley smile

La raison est simple, si tu te repose sur des fonctionnalités natives de l'HTML, le Javascript sera plus léger et cohérent. Il sera aussi plus facile à lire.

Donc, je te conseil vraiment d'utiliser des <button> ou des <a>... pour les <p> tu fais comme tu veux ! C'est moins grave ! Smiley cligne
le <a> je vais sans doute le faire...

mais n'empêche que se servir du javascript pour afficher l'étape suivante / cacher l'étape précédente, c'est bien utilisé le javascript pour ce qu'il doit être ? (de toute façon si j'ai le malheur de recharger la page au milieu des inscriptions, je perdrais pas mal de gens en route ^^)
Lothindil a écrit :
le &lt;a&gt; je vais sans doute le faire...

mais n'empêche que se servir du javascript pour afficher l'étape suivante / cacher l'étape précédente, c'est bien utilisé le javascript pour ce qu'il doit être ? (de toute façon si j'ai le malheur de recharger la page au milieu des inscriptions, je perdrais pas mal de gens en route ^^)
Remarque que tu peux gérer une version sans javascript et une avec...
Si JS n'est pas activé, alors ça charge la page suivante, s'il l'est, alors tu interceptes le clic, le bloque et tu effectues tes actions js.
Modifié par Gothor (14 May 2012 - 16:21)
Gothor a écrit :
Remarque que tu peux gérer une version sans javascript et une avec...
Si JS n'est pas activé, alors ça charge la page suivante, s'il l'est, alors tu interceptes le clic, le bloque et tu effectues tes actions js.

Je ne vais pas m'amuser à gérer une version sans js alors que le jeu qui est derrière l'inscription nécessite du javascript (et qu'il est hors de question que j'en développe une version sans javascript) Smiley biggol

Soyons clairs...
Mon public n'utilise pas de lecteur d'écran, utilise soit IE7+ (j'ai 0,2% qui utilise IE6), soit la dernière version de safari, soit la dernière version de FireFox (j'ai encore 0,4% qui utilise FF3.x), soit la dernière version de chrome.

Je vois franchement pas pourquoi je devrais gérer sans le javascript alors qu'environ 100% de ma population peut utiliser le javascript... Smiley biggol
Modérateur
a écrit :
(de toute façon si j'ai le malheur de recharger la page au milieu des inscriptions, je perdrais pas mal de gens en route ^^)

Attention toutefois à ce genre de déclaration gratuite. Je suis persuadé qui si ta page est légère et ton serveur optimisé, la différence sera si petite que peu de personnes verront la différence. Mais ni ce que je pense, ni ce que tu pense n'ont beaucoup de valeur, ce qui compte ce sont les statistiques, fais attention à observer pour voir combien sortent. Ensuite, tu adapte, observe, adapte, observe… ça ne sert à rien de partir avec de telles certitudes dès le départ. Et si vraiment tu veux être plus sûr dès le départ, il faut faire des tests auprès d'un panel représentatif de ton public cible, car il y a 1000 autres détails que le chargement qui peuvent faire fuir le joueur potentiel.

De plus, tu as de la chance, car si j'ai bien compris, après l'étape 1, le formulaire devient du fun. Personnellement, dans ces jeux, j'aime beaucoup la création du personnage et je peux y perdre beaucoup, beaucoup de temps, si elle est bien faite!

De nouveau, tous les conseils sur la structure sont là pour aider à créer quelque chose de solide.

Pour l'utilisation du js et la compatibilité, pas de problèmes, mais pour être propre, il serait pas mal de mentionner quelque part la « configuration minimale requise ».
kustolovic a écrit :

Attention toutefois à ce genre de déclaration gratuite. Je suis persuadé qui si ta page est légère et ton serveur optimisé, la différence sera si petite que peu de personnes verront la différence. Mais ni ce que je pense, ni ce que tu pense n'ont beaucoup de valeur, ce qui compte ce sont les statistiques, fais attention à observer pour voir combien sortent. Ensuite, tu adapte, observe, adapte, observe… ça ne sert à rien de partir avec de telles certitudes dès le départ. Et si vraiment tu veux être plus sûr dès le départ, il faut faire des tests auprès d'un panel représentatif de ton public cible, car il y a 1000 autres détails que le chargement qui peuvent faire fuir le joueur potentiel.

De plus, tu as de la chance, car si j'ai bien compris, après l'étape 1, le formulaire devient du fun. Personnellement, dans ces jeux, j'aime beaucoup la création du personnage et je peux y perdre beaucoup, beaucoup de temps, si elle est bien faite!

De nouveau, tous les conseils sur la structure sont là pour aider à créer quelque chose de solide.

Pour l'utilisation du js et la compatibilité, pas de problèmes, mais pour être propre, il serait pas mal de mentionner quelque part la « configuration minimale requise ».


Smiley rolleyes Ce qui est chouette à vous entendre, c'est que la partie que je travaille n'a pas été réfléchie minutieusement avant et que j'ai jamais fait de test sur des panels ou autres...

Le panel représentatif de ma cible, je l'ai déjà testé... Mon jeu est en prod' depuis un peu plus de 18 mois et il a subit avant ça une alpha qui a duré quasiment 1 an et une bêta de plusieurs mois...

J'ai placé des marqueurs, j'ai déjà testé plusieurs formes d'inscriptions et quand j'affirme que la séparation de formulaire en plusieurs pages me fait perdre des joueurs, c'est parce que c'est le cas. Idem pour le simple formulaire html (qui manifestement rebute pas mal).

J'en arrive au fait que mon inscription doit :

- ne surtout pas ressembler à un formulaire administratif avec 300 champs à remplir
- être dynamique
- être fluide (cette partie ne peut pas se faire sur plusieurs pages, mon serveur est une véritable bouse et j'ai pas les sous pour payer mieux)
- être graphique (et donc permettre de voir au fur et à mesure l'impact de ces choix)
- ne pas avoir d'information à récupérer sur d'autres pages
- ne pas avoir d'information chiffrée concernant les caractéristiques
- inclure un parrainage
- ....



Et pour la configuration requise... je crois qu'une mention "javascript obligatoire" ne ferait que souligner que mon jeu est un truc has been qui a pas besoin de la dernière carte écran à la mode ^^

(sérieusement pour vous imaginez un jeu qui indiquerait sur la page de démarrage "faut avoir une carte graphique", ça me donnerait à peu près la même impression...)
Modifié par Lothindil (14 May 2012 - 17:05)
kustolovic a écrit :
J'ai pas encore réussi à passer sur la seconde page ^^. Mais là bien sûr tu as besoin de js. Mais en séparant bien sur plusieures pages, tu évites les risques du très gros code js qui fait tout, ainsi que les erreurs qui vont avec.
Je sais bien, mais mon serveur est une énorme bouse (j'ai fini par apprendre qu'il vaut mieux un gros mutualisé qu'un tout petit dédié pour la prod', ça lague moins), donc le chargement de pages ralentit un poil.
Et le code JS ne fait pas tout, il ne fait que quelques vérifications de base :
- champs vides
- login en alphanumérique légèrement étendu (avec espace - et _ ) qui fait entre 4 et 50 caractères
- password qui fait entre 6 et 20 caractères et dont la répétition est équivalente au pass
- email valide (regex basique)
- parrain qui est un entier ou vide.

Pour la seconde page, faut laisser le temps de débugger, hein ^^ Smiley biggol


a écrit :
C'est plutôt le gameplay qui est important, surtout dans un jeu avec un aspect graphique super-nintendo… de même tes potientels joueurs seront plus attentifs au fait que ça marche super efficacement que des blings blings visuels et des bugs à l'inscription…
T'en fais pas pour mon gameplay ^^ Il est déjà pas mal riche, ainsi que le background ^^

Et l'objectif c'est de cumuler un semi-bling-bling (on parle juste d'image statiques qui sont l'avatar par défaut du PJ Smiley biggol ) avec un truc qui marche efficacement.


a écrit :
Mais de bosser fonctionnel d'abord, plus classique, moins javascript, et ensuite àmélioration de l'interface, de la saisie, etc. permet de rester plus propre et bien conçu
http://www.yuimen.com/inscription.php

Le fonctionnel il est là, il existe, il marche très bien... Il a rien comme javascript... mais si la partie récupération et traitement des variables est récupérable -bien qu'elle demande à être optimisée et sécurisée-, la partie créant l'affichage demandait une refonte intégrale.

Genre de défaut de cette fameuse partie :
- dédoublement du code en cas d'erreur (oui, carrément)
- validation php uniquement
- information erronée
- formulaire froid, sans âme,...


A l'heure actuelle, sur la partie "refondue", j'ai
- refait la partie affichage (et encore, là elle me cause des soucis, faudrait que je l'améliore pas mal)
- gérer le dynamisme de la page avec du JQuery
- fait quelques validations javascript

Me reste à faire :
- la validation coté serveur (qui sera en gros reprise de l'ancien code). J'hésite encore entre la faire via l'ajax ou simplement par le submit classique.
- l'insertion dans la base de données
- la connexion automatique qui renvoie au jeu directement (à reprendre de l'ancien code)