2010-12-20 25 views
6

Bazı grafikler çizmek için jqplot kullanıyorum. Bu harika bir araçtır, ancak her bir grafik için basit bir tıklama seçeneği yoktur. gibiBir olay yalnızca bir nesne ile nasıl ilişkilenir? jqplot

Onun eklentileri vurgulayıcı, sürüklenebilir ve imleç jqplot.eventListenerHooks için (eventListenerHooks.push ([ 'jqplotClick', geri arama]) kendilerini ekleyerek jqplot tuval tıklama/fare-olayları yakalama ilgilerini kayıt, örneğin. ya da 'jqplotMouseDown' ya da böyle de mevcuttur zamanki $ .jqplot (hedef, veriler, seçenekler) ile benim arsa yaptıktan sonra

;. sonra bu

$.jqplot.eventListenerHooks.push(['jqplotClick', myFunc]);

ve emin yeterli myFunc doile arsa üzerine tıkladığım her yerde çağrılır, neighbour, datapos ve gridpos. Komşu, en ilginç olanıdır, üzerinde bir tıklama varsa veri noktamı içerir. Bu, veri noktası üzerinde ek bilgi içeren gridpos'a yakın bir popup yapmak için ihtiyacım olan veriler.

Ancak sorun, aynı sayfada iki grafik varsa ve her bir jqplot için farklı geri aramalar kaydetmek istiyorum. Şimdi olduğu gibi, ikinci myFunc2'yi kaydettiğimde, ikinci grafikteki tüm tıklamalar myFunc aswell'den geçer!

jqplot'ta değişiklik yapmam gerekir mi? Herhangi bir yön, ne olursa olsun?

Teşekkür

Bu iyi belgelenmiş değildir

cevap

10

, ancak bunun here hakkında bir tartışma bulabilirsiniz.

Temel olarak, gerçek grafik oluşturmak için jqplot çağırma önce çizelgeniz için olay işleyicileri oluşturmanız gerekir. Bunu yapmak için, böyle bir şey yapmak gerekir: Tıkladığınız yere yakın komşu veri noktası olup olmadığını görmek için denetler sadece basit olay işleyicisi var

var handler = function(ev, gridpos, datapos, neighbor, plot) { 
    if (neighbor) { 
     alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]); 
    } 
}; 

$.jqplot.eventListenerHooks.push(['jqplotClick', handler]); 

. Sadece belirli bir arsa üzerinde etkinliklerini dinlemek isterseniz, böyle bir şey yapabileceğini: http://jsfiddle.net/andrewwhitaker/PtyFG/

Güncelleme: Burada bir çalışma örneğe bakın

var handler = function(ev, gridpos, datapos, neighbor, plot) { 
    if (plot.targetId === "#chartdiv") { 
     if (neighbor) { 
      alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]); 
     } 
    } 
    else if (plot.targetId === "#chart2div") { 
     .... 
    } 
    // etc... 
}; 

Birlikte #chartdiv yerini alacak nerede olursa olsun Olayları dinlemek istediğiniz grafiğin kimliği. Örnek güncellendi.

Güncelleme 2: Bu yöntemi kullanarak

$("#chartdiv").bind("jqplotClick", function(ev, gridpos, datapos, neighbor) { 
    if (neighbor) { 
     alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]); 
    } 
}); 

Örnek 2 grafikleri ile,: Eğer arsa olaylarla düzenli bind olayını kullanabilirsiniz gibi görünüyor

http://jsfiddle.net/andrewwhitaker/PtyFG/5/

Umut o yardım eder!

+0

Teşekkürler Andrew! Sorumlu olduğum yerde sorumu açıklığa kavuşturdum, bunun üzerine çalıştım ve harika çalışıyor, eğer zamanınız varsa, yukarıdaki mesajımı görüyorum. Her birinin farklı işleyiciye sahip olduğu iki grafik için nasıl yaparım? Oh, ve bağlantılar için teşekkürler!Şimdi onları kontrol et. – rapadura

+0

@AntonioP: Sorun değil, sadece cevabımı güncelledim. –

+0

Ah! Bunu düşündüm, ama çok güzel bir çözüm gibi görünmüyor. Olay her iki grafikte de yayılır. Https://bitbucket.org/cleonello/jqplot/src/a806b42e34e2/examples/barTest.html'de şu anda çalışıyorum ... – rapadura

İlgili konular