2012-06-09 3 views
0

Je fais un plugin jquery pour montrer les échelles de piano. J'ai une fonction appelée markScale (a, b) qui sera utilisée pour mettre en évidence certaines échelles (le paramètre a donne la hauteur de la note de départ, c'est-à-dire le nombre de demi-tons de C, l'échelle par défaut). Ce n'est pas un problème.Comment utiliser un paramètre de fonction pour faire référence à la variable du même nom?

Le problème vient de b, le type d'échelle ou d'accord à afficher. J'ai défini les touches à utiliser dans les différents types d'échelle comme suit:

var majorScale=[12,14,16,17,19,21,23,24]; 
    var nminorScale=[12,14,15,17,19,20,22,24]; 
    var hminorScale=[12,14,15,17,19,20,23,24]; 

Et donc ce que je cherche à faire est la suivante:

for(i=0;i<8;i++){ 
    $('#key-'+(b[i]+a)+'-marker').show(); 
    } 

markScale (0, « mode majeur ») ne fonctionne pas, parce que c'est juste une chaîne et ne fait pas référence à la variable de tableau dont j'ai besoin. Comment faire référence à la variable de tableau comme un paramètre de la fonction?

Merci

+0

'$ .each (majorScale, fonction (i, v) { alerte (v) })' – undefined

Répondre

2

Je pense que nous manque un peu d'info, mais si vous voulez asccess l'échelle par nom, mettre les tableaux dans un objet au lieu de variables individuelles.

var scales = { 
    majorScale:[12,14,16,17,19,21,23,24], 
    nminorScale:[12,14,15,17,19,20,22,24], 
    hminorScale:[12,14,15,17,19,20,23,24] 
}; 

Ensuite, vous pouvez faire référence à la balance en utilisant une chaîne ...

var the_scale = "majorScale" 

scales[the_scale][i]; 

Bien qu'il soit possible de se référer à des variables locales d'une chaîne, il faut une approche qui est généralement pas conseillé. Les variables globales sont un peu plus faciles.


Si vous tentiez de passe l'échelle, alors vous n'utilisez pas une chaîne du tout. Vous utilisez simplement une référence directe. majorScale

+0

Ceci est très bien grâce! – DaveR

0

Son difficile à dire sans plus de contexte, mais avez-vous essayé de passer le tableau majorScale lui-même à la fonction markScale()?

comme dans: markScale (c, majorScale); Au lieu d'une chaîne: markScale (c, "majorScale");

Questions connexes