Ручка ползунка Scriptaculous не движется, когда ползунок находится над мультикартой - PullRequest
0 голосов
/ 22 февраля 2010

У меня есть Scriptaculous Slider , отображаемый в модальном диалоговом окне над Multimap . Проблема в том, что на этой странице ручка слайдера не двигается, если вы пытаетесь ее перетащить. Если я нажму на дорожку ползунка, ручка правильно перейдет к этой точке, и вы сможете использовать ручку для правильного перетаскивания.

Нажатие на ручку успешно регистрирует щелчок, как я могу console.log() значение ползунка в этой точке. Попытка перетащить ползунок за его ручку просто продолжает записывать то же значение, а ручка не перемещается.

Ползунок корректно работает на любой странице, на которой нет мультикарты.

На страницах нет других фреймворков JS (только Prototype и Scriptaculous).

Я действительно не уверен, что проблема в том, хотя. Если ползунок ничего не регистрирует, тогда будет иметь смысл, что карта каким-то образом находится сверху или крадет событие click. Но клики явно записываются. Я также не понимаю, почему нажатие на дорожку ползунка полностью решает проблему.

Может ли кто-нибудь указать мне правильное направление (либо с исправлением, либо путем, по которому я сам должен решить проблему).

Вещи, которые я пробовал:

  • Установка z-индекса ручки.
  • Создание модального диалога видимым для начала (поскольку он скрыт для начала - я подумал, что это может быть связано с этой проблемой , но это не помогло).

1 Ответ

0 голосов
/ 22 февраля 2010

Нашел проблему.

Ползунок Scriptaculous и Multimap определяли Array.prototype.indexOf, но по-разному.

Решение (так как я хотел только один маркер на слайдере) состояло в том, чтобы отредактировать 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 дескриптор на слайдере , Я не проверял, что произойдет, если вы попытаетесь использовать это с двумя или более ручками.

...