0

我有一个Scriptaculous Slider显示在Multimap上方的模态对话框窗口中。我遇到的问题是,如果您尝试拖动它,则在此页面上滑块手柄不会移动。如果我单击滑块轨道,手柄会正确跳转到该点,然后您可以使用手柄正确拖动。

单击手柄成功注册了单击,因为我可以console.log()在该点上滑块的值。试图通过它的手柄拖动滑块只是保持记录相同的值并且手柄不会移动。

滑块在任何没有多重地图的页面上都能正常工作。

页面上没有其他 JS 框架(只有 Prototype 和 Scriptaculous)。

我真的不确定问题是否存在。如果滑块没有注册任何内容,那么地图以某种方式位于顶部或窃取点击事件是有意义的。但显然这些点击是被记录下来的。我也不明白为什么单击滑块轨道可以完全解决问题。

有人可以指出我正确的方向(通过修复程序,或者自己调试问题的路径)。

我尝试过的事情:

  • 设置句柄的 z-index。
  • 使模态对话框一开始就可见(因为它一开始是隐藏的 - 我认为它可能与这个问题有关,但它没有帮助)。
4

1 回答 1

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 Slider 和 Multimaps 可以在同一页面上一起工作,但它将使滑块上只有 1 个句柄有效。如果您尝试将其与 2 个或更多手柄一起使用,我还没有测试过会发生什么。

于 2010-02-22T15:22:45.277 回答