2013-03-07 3 views
0

Disons que j'ai cette tableaux:Occurrences et tableaux positions

likes = [4,6,42,72,7,4,42,56,6,24]; 
time = [1,2,3,4,5,6,7,8,9,10]; 

Et en cliquant dans l'un des graphiques à barres que j'ai, je suis transmis à l'heure actuelle, en fonction de la position du tableau likes.

this.click(function() { 
    var pos = result_likes.indexOf(this.bar.value); 
    var pos2 = result_time[pos]; 

    setCurTime(pos2); 
}); 

Cependant quand j'ai les mêmes valeurs de goûts, pour numéro d'instance 4, il y aura deux positions de celui-ci, et le SetCurTime, ne fera que me avec impatience la première fois « comme = 4 apparaît (timecode[0];) ?

Comment puis-je résoudre cela et être tournées vers la position de moment

+0

Qu'est-ce '' this' et this.ba r'? – Bergi

+0

@Bergi Selon gRaphael, je pense que c'est l'élément Raphael, créé par: 'var r = Raphael (" détenteur ")', – zppinto

+0

Pouvez-vous lier le gestionnaire de clic pour chaque élément? Comme this.click ((fonction (pos) {return function() {setCurTime (result_time [pos]};}) (this.val)); ' –

Répondre

0

vous devez intégrer des métadonnées dans les éléments de la barre pour résoudre ce problème, par exemple, vous pouvez utiliser custom data attributes comme tel:.

<div class="bar" data-index"5">4</div> 

Vous générez dynamiquement ceci bien sûr, pour créer chaque barre avec l'index et la valeur appropriés.

Ensuite, dans votre gestionnaire clic serait:

this.click(function() { 
    var pos = this.bar.dataset.index; 
    var pos2 = result_time[pos]; 

    setCurTime(pos2); 
}); 
+0

Les barres sont créées selon le script [gRaphael] (http://g.raphaeljs.com/). Je ne peux pas changer la façon dont cela est créé, donc malheureusement je ne peux pas utiliser votre solution ... – zppinto

0

À la lumière de vous en utilisant la bibliothèque gRaphael, vous pourriez peut-être analyser les éléments de la barre pour voir quel élément il est dans le tableau, comme ceci:

this.click(function(evt) { 
    var pos = 0; 
    var child = evt.currentTarget; 
    var type = child.nodeName; 
    while((child = child.previousSibling) != null && type === child.nodeName) 
     pos++; 

    var pos2 = result_time[pos]; 

    setCurTime(pos2); 
}); 
+0

Merci pour votre aide, mais je pense que ce code ne fonctionne pas a prévu ... 'pos2'is toujours égal à 1, indépendamment sur quelle barre j'ai appuyé! – zppinto

+0

Est-ce que ça marche pour vous maintenant? J'ai remplacé 'child = this' par' child = evt.currentTarget' –

+0

Non. La même chose arrive ... J'ai appuyé sur un graphique à barres, et je suis toujours redirigé vers l'instant 1. – zppinto

0

Republier commentaire ici pour tous les autres qui ont besoin d'une solution simliar:

var pos2 = result_time[this.bar.id]; 
Questions connexes