2013-03-07 47 views
0

可以說我有這個數組:紀錄和陣列定位

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

而且在該條形圖我有一個點擊的時候,我轉發到當前的時間,根據陣列likes位置。

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

    setCurTime(pos2); 
}); 

然而,當我有同樣的喜好值,如4號,就會有它的兩個位置,和SetCurTime,只會向前我第一次當「像= 4次出現(timecode[0];) ?

我怎樣才能解決這個問題,並轉發到正確的時間位置

+0

什麼'this'和'this.ba r'? – Bergi 2013-03-07 16:41:48

+0

@Bergi根據gRaphael,我認爲它是Raphael元素,創建者:'var r = Raphael(「holder」)', – zppinto 2013-03-07 16:53:41

+0

你可以綁定每個元素的點擊處理程序嗎?比如'this.click((function(pos){return function(){setCurTime(result_time [pos]};})(this.val));' – 2013-03-07 21:04:35

回答

0

您需要在酒吧元素嵌入的元數據來解決這個問題。例如,你可以使用custom data attributes像這樣:

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

當然,您可以動態生成此選項,以創建具有適當索引和值的每個欄。

然後在點擊處理程序是:

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

    setCurTime(pos2); 
}); 
+0

酒吧是根據[gRaphael](http://g.raphaeljs.com/)腳本創建的。我無法改變如何創建這種方式,所以很遺憾我無法使用您的解決方案... – zppinto 2013-03-07 16:41:53

0

在您使用gRaphael庫,也許你可以爬杆元件,看看它是在圖表中哪些元素,像這樣的光:

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

感謝您的幫助,但我認爲此代碼無法正常工作......'pos2'is總是等於1,獨立在我按下的那個條上! – zppinto 2013-03-07 17:35:05

+0

現在它適合你嗎?我用'child = evt.currentTarget'替換了'child = this' – 2013-03-07 17:44:05

+0

不會。同樣的事情發生了...我按下了一個條形圖,並且我總是被轉發到時刻1. – zppinto 2013-03-07 17:46:49

0

轉貼評論這裏誰需要一個simliar解決方案的任何人:

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