2016-04-27 74 views
0

从今天早些时候版本49升级到Chrome 50.0.2661.87米后,我的谷歌地图页面上的img元素没有触发他们的onclick事件。这些img通过JavaScript使用google maps api controls数组动态地添加到页面中。我已经能够在一个简单的谷歌地图实现here显示的问题重现。在IE和Firefox中,此页面上的聊天按钮会触发并显示警报。但在Chrome 50中,它有时只会触发。我可以在同事的计算机上重现问题。它似乎在你第一次打开页面时工作,但如果你重新加载它不起作用。当你点击“实时聊天”按钮时,它应该显示一个提醒。另外,如果我使用相同的技术将地图上的span和div元素作为兄弟元素放置在img元素上,那么它们的onclick事件会触发很好。Onclick事件不会在谷歌地图API中触发img元素

下面是上面引用页面的代码。

<!DOCTYPE html> 
<html> 
<head> 
    <title>Simple Map</title> 
    <meta name="viewport" content="initial-scale=1.0"> 
    <meta charset="utf-8"> 
    <style> 
     html, body { 
      height: 100%; 
      margin: 0; 
      padding: 0; 
     } 

     #map { 
      height: 100%; 
     } 
    </style> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=visualization,geometry"></script> 
    <script type="text/javascript"> 
     function initialize() 
     { 
      map = new google.maps.Map(document.getElementById('map'), { 
       center: {lat: -34.397, lng: 150.644}, 
       zoom: 8 
      }); 
      var container = document.createElement('div'); 
      var img = document.createElement('img'); 
      img.src = "http://diamondmaps.com/img/btnchat.png"; 
      img.onclick = function() 
      { 
       alert('click'); 
      }; 
      container.style.padding = '5px'; 
      container.appendChild(img); 
      map.controls[google.maps.ControlPosition.TOP_LEFT].push(container); 
     } 
     google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 
</head> 
<body> 
    <div id="map"></div> 
</body> 
</html> 
+0

从Ad.Infinitum的答案提示我一直在尝试不同的时间和顺序的事件。我能够获得一个临时解决方案,在该解决方案中,我不会订阅onclick事件,直到图像加载完成。这是丑陋的,我不明白为什么它会起作用,但是自从做出这种改变以来,我一直无法使它失败。 – benHill

回答

1

通常,在设置img.src之前,您希望附加事件处理程序。

var img = document.createElement('img'); 
img.onclick = function() { 
    alert('click'); 
}; 
img.src = "http://diamondmaps.com/img/btnchat.png"; 

话虽如此,传入的报告称,Chrome 50会破坏img.onload。

https://productforums.google.com/forum/#!topic/chrome/p51Lk7vnP2o

我不知道img.onclick,但我怀疑他们可能是相关的。

相关问题