11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour tout le monde, je suis actuellement en phase de recherches pour approfondir mes conaissances en Javascript et je me retrouve face à une question...

Comment comparer les valeurs contenues dans deux Tableaux différents ?

En réalité il s'agit d'une action simple pour la majorité des codeurs javascript (enfin je suppose)
c'est un QCM, contenant 5 question de 5 réponses chacune.

Soit je doit récupérer et comparer les valeurs de chaque bouton radio sélectionnés avec les valeurs contenues dans le tableau réponses... Voici comment j'ai procédé:

$('#valid').click(function() {
		var points = 0;
		var rep =  [$('input[type=radio][name=ex1]:checked').attr('value'),
			$('input[type=radio][name=ex2]:checked').attr('value'),
			$('input[type=radio][name=ex3]:checked').attr('value'),
			$('input[type=radio][name=ex4]:checked').attr('value'),
			$('input[type=radio][name=ex5]:checked').attr('value')];

		var sol =  ['louche',
			'genereux',
			'hate',
			'apaiser',
			'limite'];

		if (rep[0] == sol[0]) {
			points++;
		};
		if (rep[1] == sol[1]) {
			points++;
		};
		if (rep[2] == sol[2]) {
			points++;
		};
		if (rep[3] == sol[3]) {
			points++;
		};
		if (rep[4] == sol[4]) {
			points++;
		};
		console.log(points);
	});


Le problème vient du fait que cette instruction est assez lourde à mon sens, c'est du bidouillage car je ne savais pas comment faire...

peut être en utilisant une Boucle ?

De plus, il ne s'agit que des réponses et solutions de l'exercice 1, j'aimerais créer un certain nombre d'exercices différents et le total des points doit être récupérable...

Quelqu'un pour une petite critique constructive de mon code ?

Merci les amis Smiley langue
Modifié par WeedSass (12 Sep 2014 - 15:27)
Bonjour.

Effectivement ta quinzaine de ligne peuvent être rapidement remplacée par une boucle for :
for (var i = 0; i <= 4; i++) {
  if (rep[ i] == sol[ i]) points++; // les espaces avant les i sont à supprimer
}


Mais le soucis selon moi est que le traitement en javascript de ce questionnaire n'est pas très approprié parce que non sécurisé. Je ne saurais que trop te conseiller de gérer ce traitement avec un langage serveur (PHP ou autres). Après rien ne t'empêche d'utiliser Ajax...
Modifié par SolidSnake (12 Sep 2014 - 15:37)
Voici une autre solution peut-être fonctionnelle:


var i = -1;
while( i < 4 ){
         if(rep [ i] == sol [ i]){
                 points++;
                 i++;
         };
};


mais le souci du coup vient du fait que les tableaux ne doivent JAMAIS dépasser 5 valeurs...

Moyen mais je me rapproche Smiley smile
Modifié par WeedSass (12 Sep 2014 - 15:41)
Merci de ta réponse, je voulais utiliser javascript pour ne pas avoir à recharger la page entre chaque exercices,

Ces derniers sont contenus sur un site web codé en PHP donc je pourrais effectuer la vérification en PHP, surtout qu'il est vrai que trouver les réponses du questionnaire sera facile pour un petit malin de l'informatique Smiley lol

mais cela m'obligerais à recharger la page entre chaque réponse, donc impossible pour moi d'envoyer un petit effet jquery or something else Smiley langue

Je réfléchis à cela... ce serait bête de tout coder avent de me rendre compte que php serait en effet beaucoup plus approprié ^^
WeedSass a écrit :
mais cela m'obligerais à recharger la page entre chaque réponse, donc impossible pour moi d'envoyer un petit effet jquery or something else

Et non ! Raison de plus d'utiliser Ajax (avec jQuery c'est normalement du gâteau) qui permet des requêtes asynchrone en PHP.
salut,
peut être une autre alternative ?

var reponses = document.querySelectorAll("input[type=radio][name^=ex]"),
	points = 0,
	solut = [
		'louche',
		'genereux',
		'hate',
		'apaiser',
		'limite'
	],
	i = 0,
	l = solut.length;

for ( ; i<l; i++) if (reponses[ i ].value == solut[ i ]) solut++;
Merci de ta proposition, Cependant je vais rester sur l'idée de faire la correction coté serveur histoire de ne pas exposer les solutions aux exercices...

AJAX est tout indiqué pour faire ce type d'exercices, avec les effets que je souhaite,la sécurité des résultats et en plus c'est vraiment hyper simple à mettre en place Smiley smile