2010-10-19 6 views
1

Je suis begginer avec Javascript/jQuery et j'espère que quelqu'un peut me aider avec ce qui suit:jquery/javascript: tableaux

J'ai une forme simple (7 questions, boutons 3 radio/réponses par question - sauf pour question 5 avec 8 choix possibles) et sur la base des réponses sélectionnées, lorsque l'utilisateur clique sur 'vue-conseil' je souhaite afficher des conseils pertinents (combinaison de 38 conseils possibles) sous le formulaire. J'ai donné des valeurs "a", "b", "c", ... aux boutons radio et je les collectionne dans un tableau. La partie où le script alerte le tableau fonctionne bien. Je n'arrive pas à comprendre la partie où j'affiche les conseils en fonction des valeurs du tableau.

J'apprécierais votre aide! Merci!

Voici le code:

 

var laArray = new Array(); 

$('.button-show-advice').click(function(){ 

    $(":radio:checked").each(function(i){ 
     laArray[i] = $(this).val(); 
     if (laArray == ["a","d","g","j","m","u"]) { 
     $("#advice-container, #advice1, #advice2").show(); // something is wrong here :(
      }; 
    }) 
    alert(laArray) // testing to see if it works 

}) 

+1

Veuillez ajouter le code html –

+1

Il est préférable de déclarer un tableau comme suit: var laArray = []; – jelbourn

+0

HTML du formulaire: http://jsfiddle.net/tschardak/HQeXH/ – tschardak

Répondre

0

Plutôt que de test pour l'égalité, je pense que les meilleurs moyens est de vérifier si oui ou non chacun de vos valeurs sont dans le tableau en utilisant la fonction jQuery inArray .

Accordé, ce n'est que le début du code. Vous pourriez probablement écrire une fonction pour étayer ceci, comme ça.

function radioSelected(val) { 
    return ($.inArray(val, laArray) != -1); 
} 

et de l'adapter à votre script existant.

+0

J'ai essayé d'ajouter le code HTML du formulaire, mais j'ai eu une erreur en disant que je ne peux pas ajouter autant sans crédits .... – tschardak

+0

merci pour la réaction, villecoder. malheureusement, à un débutant comme moi vous devez le dessiner;) la façon dont je pensais que cela fonctionnerait le mieux est de comparer les choix contre tous les tableaux possible/toutes les combinaisons possibles de radios sélectionnées, plutôt que de cocher une par un. Parce que chaque choix a trop de conseils qui vont avec ... – tschardak

0

Vous ne pouvez pas comparer les tableaux de cette façon, vous devriez probablement soit comparer chaque élément des 2 tableaux

function compare_array(array1,array2) { 
    var i; 
    for(i=0;i=array1.length;i++) { 
     if(array1[i]==array2[i]) { 
      return false; 
     } 
    } 
    return true; 
} 

ou sérialiser le tableau sous une forme comparable (comma chaîne séparée par exemple)

function compare_array(array1,array2) { 
    return array1.join(",")==array2.join(","); 
} 
+0

Comparez avec sérialisation, sympa! +1 :) – nekman

+0

pas très fiable cependant, je l'utiliserais dans tous les cas – dvhh

0

Serait ravi de voir le code HTML. Mais je suppose que vous voulez faire quelque chose comme ceci:


var laArray = []; 
var compareValues = function(arr1, arr2) { 
    $(arr1).each(function(index, el) { 
    if(el !== arr2[index]) { 
    return false; 
    } 
    }); 
    return true; 
}; 

$('.button-show-advice').click(function(){ 
    $(":radio:checked").each(function(i){ 
     laArray.push($(this).val());   
    }); 
    if(compareValues(laArray,["a","d","g","j","m","u"])) { 
     $("#advice-container, #advice1, #advice2").show(); 
    } 
}); 

EDIT: mis à jour le code, oublié le}); ...

+0

HTML (formulaire) partie 1: – tschardak

+0

J'apprécie énormément votre aide, Nisse! Cependant, cette solution ne semble pas fonctionner. puisque je ne peux pas poster le HTML ici je ne suis pas sûr de ce que je fais mal ... – tschardak

+0

J'ai oublié le manquant}); à la fin de chaque boucle. Essayez de copier à nouveau l'exemple. – nekman