2010-08-25 4 views
1

Я использовал описанную здесь методику Click event in Google Map InfoWindow not caught, чтобы динамически добавлять обработчики событий кликов к некоторому содержимому, добавленному в Google Map InfoWindow. Прекрасно работает, за исключением IE.Нажмите Событие Зарегистрировано в jQuery Live в Google Map InfoWindow

У меня есть контент с обычными якорь-тегами, и эти ссылки работают нормально.

У меня есть якорный тег с обработчиком jQuery (live), который считывает идентификатор, чтобы вызвать другое действие, и ничего не делает в IE. Chrome/FF и т. Д. Работают просто отлично. Я пробовал использовать div и span без изменения поведения.

Любые идеи?

Редактировать: Это с Google Maps v2 (я знаю, что это устарело) и не работает в IE 7 или 8. Не надоело IE6 в этом проекте.

Редактировать: Вот пример кода, в котором выполняется поведение.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA" type="text/javascript"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script> 

<style type="text/css"> 
#gmap{ height:450px;width:350px; } 
</style> 

<script type="text/javascript"> 
    var gmap; 
    var sampleLatLon = new GLatLng(37.4419, -122.1419); 
    var sampleIcon = new GIcon(G_DEFAULT_ICON); 

    $(document).ready(function() { 

     // Google maps setup 
     $(window).unload(function() { GUnload(); }); 
     var gmap = new GMap2(document.getElementById("gmap")); 
     gmap.setCenter(sampleLatLon, 13); 
     gmap.setUIToDefault(); 

     // Marker and InfoWindow setup 
     var marker = new GMarker(sampleLatLon, { icon: sampleIcon }); 
     var infoWindowMarkup = '<a id="infowindow-1" class="clickeventvialive">click me</a>'; 
     marker.bindInfoWindowHtml(infoWindowMarkup); 
     gmap.addOverlay(marker); 

     $('.clickeventvialive').live('click', function() { 
      alert('Are you Internet Exploder??'); 
     }); 
    }); 
</script> 

</head> 
<body> 
    <div id="gmap"></div> 
</body> 
</html> 
+0

Вы используете Google Maps v3 или v2? Также - какие версии IE - 6/7/8? – wows

ответ

1

Существует два способа решения этой проблемы с jquery, используя старый javascript skool javascript.

В методе JQuery связывания события после информационного окна показан и созданный элемент, кажется, решить эту проблему:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title></title> 
     <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA" type="text/javascript"> 
     </script> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"> 
     </script> 
     <style type="text/css"> 
      #gmap { 
       height: 450px; 
       width: 350px; 
      } 


     </style> 
     <script type="text/javascript"> 
      var gmap; 
      var sampleLatLon = new GLatLng(37.4419, -122.1419); 
      var sampleIcon = new GIcon(G_DEFAULT_ICON); 

      $(document).ready(function(){ 

       // Google maps setup 
       $(window).unload(function(){ 
        GUnload(); 
       }); 
       var gmap = new GMap2(document.getElementById("gmap")); 
       gmap.setCenter(sampleLatLon, 13); 
       gmap.setUIToDefault(); 

       // Marker and InfoWindow setup 
       var marker = new GMarker(sampleLatLon, { 
        icon: sampleIcon 
       }); 

       //marker.bindInfoWindowHtml(infoWindowMarkup); 

       GEvent.addListener(marker, "click", function(){ 
        var infoWindowMarkup = '<div class="container"><a id="infowindow-1" class="clickeventvialive">click me</a></div>'; 
        gmap.openInfoWindowHtml(sampleLatLon, infoWindowMarkup, { 
         "onOpenFn": function(){ 
         $(".clickeventvialive").bind("click", function(){alert("hello")}); 
         } 
        }); 

       }); 



       gmap.addOverlay(marker); 

      }); 
     </script> 
    </head> 
    <body> 
     <div id="gmap"> 
     </div> 
    </body> 
</html> 

или старый метод SKOOL, где вы можете просто добавить OnClick обработчик для Вашей ссылки HTML:

var infoWindowMarkup = '<a id="infowindow-1" onclick=alert("Old Skool") class="clickeventvialive">click me</a>'; 
+1

Спасибо за предложение - я закончил тем, что начал навязчивый javascript-способ и вставлял onclick даже в разметку. Я потерял 50 пунктов SO rep и тонны dev, но было поздно в пятницу, и мне нужно было исправить. Позже я загляну в GEvent, чтобы искупить себя (если угодно, только для себя). – MotoWilliams

Смежные вопросы