Je viens de recommencer le codage. Et c'est juste une preuve de concept. Ce code fonctionne!
Mais je veux ajouter des valeurs supplémentaires et je n'ai aucune idée de comment le faire. Ainsi, si vous appuyez sur une seule réponse, vous pouvez obtenir plusieurs valeurs. Donc, pour la première question, je ne veux pas seulement être un chat. Mais aussi un poisson. Mais comment faire?
HTML
$("#personalityQuiz").submit(function(event) {
event.preventDefault();
var answers = $(this).serializeArray();
var scores = {
cat: 0,
dog: 0,
fish: 0,
horse: 0
};
for(var answer of answers) {
scores[answer.value] += 1;
}
var maxAnimal = "cat";
for(var animal in scores){
if(scores[animal] > scores[maxAnimal]){
maxAnimal=animal;
}
}
$("#personalityQuiz").css ('display','none');
$(".result#"+maxAnimal).css ('display','block');
});
<form id="personalityQuiz">
<h3> What is your favorite food?</h3>
<input type="radio" name="food" value="cat"> I only eat meat.<br>
<input type="radio" name="food" value="horse"> I'm a strict vegetarian.<br>
<input type="radio" name="food" value="dog"> I love all food!<br>
<h3> What is your favorite hobby?</h3>
<input type="radio" name="hobby" value="horse"> I was born to run.<br>
<input type="radio" name="hobby" value="dog"> Anything with a ball.<br>
<input type="radio" name="hobby" value="cat"> Naps<br>
<h3> What scares you?</h3>
<input type="radio" name="fear" value="dog"> Vacuum cleaners.<br>
<input type="radio" name="fear" value="cat"> Water<br>
<input type="radio" name="fear" value="horse"> Anything that moves!<br>
<input type="submit" value="Submit">
</form>
<div class="result" id="cat">
<h2> You are a cat! </h2>
</div>
<div class="result" id="dog">
<h2> You are a dog! </h2>
</div>
<div class="result" id="horse">
<h2> You are a horse! </h2>
</div>
<div class="result" id="fish">
<h2> You are a fish! </h2>
</div>
<script type='text/javascript' src='file:///Users/Desktop/index.js'></script>
JS
<head> <link rel="stylesheet" href="index.css"> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
5 Réponses :
Vous pouvez définir un tableau ou un objet Javascript comme valeur. E.G
Vous devez d'abord masquer tous .result les éléments avant d'afficher celui avec le meilleur score.
NB: vous pouvez utiliser les méthodes jQuery hide et show :
$("#personalityQuiz").hide();
$(".result").hide(); // <---- add this
$(".result#"+maxAnimal).show();
( J'ai mal lu la question , mais je laisserai cette réponse pas tout à fait pertinente au cas où elle susciterait d'autres idées pour vous)
Si vous voulez plusieurs options, utilisez des cases à cocher pour celles-ci, au lieu de la radio boutons.
Regardez ce tutoriel: https://www.tutorialrepublic.com/faq/how-to-get-the-values-of-selected-checkboxes-in-a-group-using-jquery.php
L'idée est que vous définissez le même nom sur plusieurs cases à cocher (au lieu de boutons radio), puis utilisez simplement JQuery pour récupérer tous les éléments sélectionnés dans un tableau, comme ceci:
var animals = [];
$.each($("input[name='animal']:checked"), function(){
animals.push($(this).val());
});
J'espère que cela vous aidera!
Ceci est mon idée -
Vous devez définir votre recherche de questions et réponses comme
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="personalityQuiz">
<h3> What is your favorite food?</h3>
<input type="radio" name="food" value="cat"> I only eat meat.<br>
<input type="radio" name="food" value="horse"> I'm a strict vegetarian.<br>
<input type="radio" name="food" value="dog"> I love all food!<br>
<h3> What is your favorite hobby?</h3>
<input type="radio" name="hobby" value="horse"> I was born to run.<br>
<input type="radio" name="hobby" value="dog"> Anything with a ball.<br>
<input type="radio" name="hobby" value="cat"> Naps<br>
<h3> What scares you?</h3>
<input type="radio" name="fear" value="dog"> Vacuum cleaners.<br>
<input type="radio" name="fear" value="cat"> Water<br>
<input type="radio" name="fear" value="horse"> Anything that moves!<br>
<input type="submit" value="Submit">
</form>
<div class="result" id="cat">
<h2> You are a cat! </h2>
</div>
<div class="result" id="dog">
<h2> You are a dog! </h2>
</div>
<div class="result" id="horse">
<h2> You are a horse! </h2>
</div>
<div class="result" id="fish">
<h2> You are a fish! </h2>
</div>en fonction de l'objet ci-dessus si le chat est la réponse puis afficher tous les éléments en fonction sur la clé.
Pas parfait mais devrait vous donner une idée
$("#personalityQuiz").submit(function(event) {
var qalookup = { "cat" : ['cat','fish'],"dog" : ["dog"], "horse": ["hores"] };
event.preventDefault();
var answers = $(this).serializeArray();
var scores = {
cat: 0,
dog: 0,
fish: 0,
horse: 0
};
$(".result").hide();
for(var answer of answers) {
var ans = qalookup[answer.value];
ans.forEach(function(val) {
$("#"+val).show();
scores[val] += 1;
});
}
var maxAnimal = "cat";
for(var animal in scores){
if(scores[animal] > scores[maxAnimal]){
maxAnimal=animal;
}
}
$("#personalityQuiz").css ('display','none');
$(".result#"+maxAnimal).css ('display','block');
});
var qalookup= { "cat" : ['cat','fish'],"dog" : ["dog"], "horse": ["horse"] };
Si vous voulez qu'une option radio fournisse plusieurs valeurs, ajoutez simplement une valeur qui sépare plusieurs valeurs par un séparateur comme une virgule:
var optionsLookup = {
"cat" : [ "cat", "tiger", "lion" ],
"dog" : [ "dog", "wolf" ],
// etc.
};
Ensuite, dans votre JavaScript, séparez-les simplement avec une simple stringValue.split (',') qui vous donnera la liste des valeurs que votre sélection unique représente.
p>
var valuesOfSingleSelection = stringValue.split( ',' );
Si vous voulez être plus élaboré Vous pouvez également créer une table de recherche, dans laquelle certaines valeurs peuvent être mappées à d'autres valeurs, comme ceci:
<input type="radio" name="food" value="cat,lion,tiger"> I only eat meat.<br>
De cette façon, vous pourriez mieux gérer les données de votre enquête, sans avoir à revenir au HTML.
Sur quelle réponse tu quoi montrer Fish?
Pas vraiment parce que c'est juste une preuve de concept. Je veux juste pouvoir que si j'ajoute le premier aux questions, la réponse poisson. Le résultat final est le poisson.
Tout le monde merci pour les réponses! Je regarde dedans!