0

マルチマップの上のモーダルダイアログウィンドウに表示されているScriptaculousSliderがあります。私が抱えている問題は、このページでスライダーハンドルをドラッグしようとしても動かないことです。スライダートラックをクリックすると、ハンドルがそのポイントに正しくジャンプし、ハンドルを使用して正しくドラッグできます。

ハンドルをクリックすると、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 に答える