2010-02-22 13 views
0

J'ai un Scriptaculous Slider affiché dans une fenêtre de boîte de dialogue modale au-dessus d'un Multimap. Le problème que j'ai, c'est que sur cette page, la poignée du curseur ne bouge pas si vous essayez de le faire glisser. Si je clique sur la piste du curseur, la poignée saute correctement à ce point et vous pouvez ensuite utiliser la poignée pour glisser correctement.La poignée du curseur Scriptaculous ne bouge pas lorsque le curseur est au-dessus d'un multimap

En cliquant sur la poignée enregistre avec succès le clic que je peux console.log() la valeur du curseur à ce point. Essayer de faire glisser le curseur par sa poignée continue de consigner la même valeur et la poignée ne bouge pas.

Le curseur fonctionne correctement sur toutes les pages sur lesquelles il n'y a pas de multimap.

Il n'y a pas d'autres frameworks JS sur les pages (juste Prototype et Scriptaculous).

Je ne suis pas vraiment sûr que le problème soit bien. Si le curseur n'inscrivait rien, cela signifierait que la carte était en quelque sorte ou volait l'événement click. Mais les clics sont évidemment enregistrés. Je ne comprends pas non plus pourquoi le fait de cliquer sur la piste du curseur résout complètement le problème. Quelqu'un peut-il me diriger dans la bonne direction (soit avec un correctif, ou un chemin à prendre pour déboguer le problème moi-même).

choses que j'ai essayé:

  • Réglage de la z-index de la poignée.
  • Rendre le modal-dialogue visible pour commencer (comme il est caché pour commencer - je pensais qu'il pourrait être lié à this issue, mais cela n'a pas aidé).

Répondre

0

a trouvé le problème.

Les curseurs Scriptaculous et Multimap définissaient Array.prototype.indexOf mais de différentes manières.

La solution (puisque je voulais seulement 1 poignée sur le curseur) était d'éditer slider.js et de changer les appels à 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]); 

Note à toute personne qui utilise ce correctif: Bien que ce correctif faire en sorte que le curseur Scriptaculous et Multimaps peuvent travailler ensemble sur la même page, il fera en sorte que seulement 1 poignée sur le fonctionnement du curseur . Je n'ai pas testé ce qui se passe si vous essayez d'utiliser ceci avec 2 poignées ou plus.