2010-02-22 47 views
0

我有一個Scriptaculous Slider顯示在Multimap上方的模態對話窗口中。我遇到的問題是,如果您嘗試拖動滑塊手柄,該頁面上的滑塊手柄不會移動。如果我點擊滑塊軌道,手柄就會正確跳轉到該點,然後您可以使用手柄正確拖動。當滑塊位於多圖上方時,Scriptaculous滑塊手柄不移動

點擊手柄成功註冊點擊,因爲我可以console.log()滑塊在該點的值。試圖通過它的句柄拖動滑塊只會記錄相同的值並且句柄不會移動。

滑塊在任何沒有multimap的頁面上都能正常工作。

頁面上沒有其他JS框架(只是Prototype和Scriptaculous)。

我真的不確定是否有問題。如果滑塊沒有註冊任何東西,那麼這將是有意義的,地圖是ontop某種方式或竊取點擊事件。但點擊顯然正在被記錄下來。我也不明白爲什麼點擊滑塊軌道完全解決了這個問題。

有人能指出我正確的方向(無論是修復,還是自己調試問題的路徑)。

事情我已經嘗試:

  • 設置手柄的z-index的。
  • 使模態對話框可見(首先隱藏起來 - 我認爲它可能與this issue有關,但它沒有幫助)。

回答

0

發現問題。

Scriptaculous Slider和Multimap都以不同的方式定義了Array.prototype.indexOf

該解決方案(因爲我只想要1個手柄上的滑塊)是編輯slider.js並將呼叫更改爲this.handles.indexOf

Index: slider.js 
=================================================================== 
--- slider.js (revision 1) 
+++ slider.js (working copy) 
@@ -219,14 +219,14 @@ 
      this.offsetY = (pointer[1] - offsets[1]); 
     } else { 
      // find the handle (prevents issues with Safari) 
-   while((this.handles.indexOf(handle) == -1) && handle.parentNode) 
+   while((this.handles[0] != handle) && handle.parentNode) 
      handle = handle.parentNode; 
-    
-   if (this.handles.indexOf(handle)!=-1) { 
+ 
+   if (this.handles[0] == handle) { 
      this.activeHandle = handle; 
-   this.activeHandleIdx = this.handles.indexOf(this.activeHandle); 
+   this.activeHandleIdx = 0; 
      this.updateStyles(); 
-    
+ 
      var offsets = Position.cumulativeOffset(this.activeHandle); 
      this.offsetX = (pointer[0] - offsets[0]); 
      this.offsetY = (pointer[1] - offsets[1]); 

注意使用此修復程序的人:雖然此修復程序將讓這個在Scriptaculous的滑塊和屈德寧可以在同一頁面上一起工作,這將讓這個只有1滑塊上的作品手柄。如果您嘗試在2個或更多個手柄上使用此功能,我還沒有測試過會發生什麼情況。