à quoi ressemble mon JSON:
{ "main_object": { "id": "5", "getExerciseTitle": "TestFor", "language": "nl_NL", "application": "lettergrepen", "main_object": { "title": "TestFor", "language": "nl_NL", "exercises": [ { "word": "test", "syllables": [ "test01", "test02", "test03", "" ] }, { "word": "tesst", "syllables": [ "test11", "test12", "", "" ] } ] }, "dataType": "json" } }
à quoi ressemble ma fonction:
function prepareCheck() { $.getJSON('json_files/jsonData_' + ID + '.json', function(json) { $(document).on('input', '.syl-input', function() { var $wordContainer = $(this).closest('.exerciseWord'), wordIndex = $('.exerciseWord').index($wordContainer); var valuesArray = $wordContainer.find('.syl-input').map(function() { return this.value }).get() var syllablesArray = json.main_object.main_object.exercises[wordIndex].syllables; console.log(syllablesArray); var isValid = valuesArray.every(function(val, i) { return syllablesArray[i] === val; }); $wordContainer.toggleClass('valid', isValid) }); }); } }); }
Je voudrais créer une boucle qui passera par les syllabes pour chaque word
désiré. word
“test” a 3 syllables
et sur mon interface il affiche 3 champs de saisie pour le word
souhaité qui doit être rempli correctement. Cependant, comment puis-je parcourir mes syllables
et créer cela lorsque toutes les syllables
du word
souhaité sont remplies, elles doivent toutes être transformées en boutons verts. Les syllables
désirées ne doivent se transformer en boutons verts que lorsque je les remplis correctement. Donc, pour mon premier word
les 3 champs de saisie doivent passer aux boutons verts lorsque j’insère avec succès “test01”, “test02”, “test03” et pour mon deuxième word
il convient de transformer les 2 champs de saisie en boutons verts lorsque je les remplis correctement . Ils doivent cependant restr des champs de saisie tant que tous les champs de saisie désirés d’un word
sont pas renseignés correctement.
La méthode suivante utilise Array#every()
pour parcourir un tableau des valeurs des entrées associées à chaque mot et les faire correspondre aux données de ce mot.
Utilise également jQuery index()
du conteneur de mots parent pour obtenir les données appropriées à comparer
$(document).on('input', '.syl', function() { var $wordContainer = $(this).closest('.word'), wordIndex = $('.word').index($wordContainer); var valuesArray = $wordContainer.find('.syl').map(function() { return this.value }).get() var syllablesArray = data.main_object.main_object.exercises[wordIndex].syllables var isValid = valuesArray.every(function(val, i) { return syllablesArray[i] === val; }); $wordContainer.toggleClass('valid', isValid) })
.word.valid .syl { background: yellow }