Странная проблема prototype-jquery при использовании карт Google - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть сайт cakePhp, я использую прототип для всего, что есть в ajax, и jQuery для анимации, ...

Я справился с проблемой jquery-prototype так:

echo $javascript->link('jquery-1.6.2');
echo $javascript->link('jquery.cookie');
echo $javascript->link('jQueryNoConflict');
echo $javascript->link('prototype');

И jQuerynoConflict содержит только

$.noConflict();

Я создал небольшой JS-скрипт, который показывает элементы с определенным классом и скрывает другие элементы с другим классом:

if(jQuery.cookie('isRawPrice')==1){ 
    jQuery('.priceWithoutTva').show();
    jQuery('.priceWithTva').hide(); 
}else{

    jQuery('.priceWithoutTva').hide();
    jQuery('.priceWithTva').show(); 
}

Это работает на каждой моей странице, кроме той, на которой есть элемент карты Google.который я добавляю так:

  function InitMap(elementId, initPosition, initZoom, multiplePolygonsString) {
   var pos = initPosition.split(',');
    var myLatLng = new google.maps.LatLng(pos[0], pos[1]    );
    var myOptions = {
      zoom:initZoom,
      center: myLatLng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
    };

    map = new google.maps.Map(document.getElementById(elementId),       myOptions);
    var multiplePolygons = multiplePolygonsString.split(';');
    for(var i=0;i<multiplePolygons.length;i++){
        var currentPolygon,match,coordinates = [];

        var reg = /\(\s*([0-9.-]+)\s*,\s*([0-9.-]+)\s*\)/g ;

        while((match =  reg.exec(multiplePolygons[i]))!==null){
            coordinates.push(   new google.maps.LatLng(+match[1], +match[2]));  
        }

        currentPolygon = new google.maps.Polygon({
            paths: coordinates,
            strokeColor: "#FF0000",
            strokeOpacity: 0.8,
            strokeWeight: 3,
            fillColor: "#FF0000",
            fillOpacity: 0.35
        });

        currentPolygon.setMap(map);

        // Add a listener for the click event
        google.maps.event.addListener(currentPolygon, 'click', function(event){         showArrays(event, "testInfoBulle");     });
    }



    infowindow = new google.maps.InfoWindow();
  }

(это в основном загружает карту и создает несколько полигонов в определенных регионах.).Эта карта генерируется каждый раз, когда я ее отображаю.

Но когда я отображаю ее и пытаюсь скрыть / показать с предыдущим кодом, я получаю следующее исключение:

Uncaught TypeError: Object #<SVGAnimatedString> has no method 'match'prototype.js:300
Enumerable.eachprototype.js:300
Enumerable.injectprototype.js:372
document.getElementsByClassNameprototype.js:932
Sizzlejquery-1.6.2.js:4869
jQuery.fn.extend.findjquery-1.6.2.js:5188
jQuery.fn.jQuery.initjquery-1.6.2.js:189
jQueryjquery-1.6.2.js:27
updateDisplay.js:26 ---> This is the jQuery('.priceWithoutTva').show(); line
(anonymous function)cat3:3000:643
onclickcat3:3000:644

Почему этопроходит через библиотеку прототипов, когда он находится в методе jquery ???

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

У меня был jQuery 1.6.2 и прототип 1.4, теперь я обновился до jquery 1.6.4 и прототипа 1.7, и он работает!

0 голосов
/ 20 сентября 2011

Может ли это быть конфликтом с вашей переменной match и, возможно, глобальной переменной или функцией соответствия в файлах прототипа или jquery? попробуйте переименовать ваше имя во что-то более уникальное и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...