2016-05-20 5 views
0

Код ниже используется для отображения информации в Google maps по щелчку маркеров. Но по каким-то причинам событие «closeclick» для информационных окон не работает. Раньше он работал, но из-за большей сложности в требованиях, таких как infowindow, объект должен быть вновь открыт, как и после обновления карт на вызовах Ajax. Поэтому карты продолжают обновляться через одну минуту, и требование состоит в том, что infowindows должны оставаться открытыми, если не закрыты при вызовах Ajax.GooglemapV3 infowindow closeclick событие не получает огонь

Мы также нарисовываем полилинии на картах, а также открываем инфоиндустрий в каждой точке, которую он рисует над картой Google, и такое же требование также применимо для объектов infowindows, как указано выше.

 $(".mainDiv").each(function() { 
    google.maps.event.trigger(map, 'click'); 
    if (PlayBackDevices.indexOf(removeSpaces($(this).find(".deviceid").html()).trim()) > -1) { 
      var image = new google.maps.MarkerImage($(this).find(".imagepath").html()); 
      myLatLng = new google.maps.LatLng($(this).find(".latitude").html(), $(this).find(".longitude").html()); 
      var beachMarker = new MarkerWithLabel({ 
       position: myLatLng, 
       map: map, 
       icon: image, 
       title: $(this).find(".deviceName").html().trim(), 
       labelContent: $(this).find(".deviceName").html().trim() 
      }); 
      markers.push(beachMarker); 
      var imgPath = trailImagePath + trailColor.trim() + ".png"; 
      var beachMarkerTemp = new RichMarker({ 
       position: myLatLng, 
       map: map, 
       draggable: false, 
       flat: true, 
       anchor: RichMarkerPosition.BOTTOM//, 
      }); 
      i = i + 1; 
      oms.addListener('click', function (beachMarker) { 
       infoWindow.close(); 
       infoWindowDevicePoints.length = 0; 
       if (deviceName.trim() == beachMarker.title.trim()) { 
        $.ajax({ 
         type: "Post", 
         url: "/Home/CommonLevel2Information", 
         data: { DeviceId: 101 }, 
         async: true, 
         dataType: "html", 
         cache: false, 
         success: function (result) { 
          result = createInfo('', result + '<br/><a href="' + linkToNextLevel + '" title="Click to view DeviceDetail"><%=GlanceWeb.Resources.Level2.Level2.RegMrDtl%>...</a>', deviceId); 
          beachMarker.desc = result; 
          if (result.toString().indexOf("divMainSnap") > 0) { 
           var checkExist = setInterval(function() { 
            $(".gm-style-iw").css("width", "400px !important;"); 
            infoWindow = new google.maps.InfoWindow({ content: beachMarker.desc, maxWidth: 400 }); 
            infoWindow.open(map, beachMarker); 
            position = beachMarker.position;// iw.getPosition(); 
            $(".gm-style-iw").each(function() { 
             if ($(this).find("div.divFirstSnap").length) { 
              $(this).removeClass("wiThouImage"); 
              $(this).css("max-width", "none"); 
             } 
            }) 
            clearInterval(checkExist); 
           }, 1000); 
          } 
          else { 
           var checkExist = setInterval(function() { 
            infoWindow = new google.maps.InfoWindow({ content: beachMarker.desc, maxWidth: 200 }); 
            infoWindow.open(map, beachMarker); 
            position = beachMarker.position;// iw.getPosition(); 
            if ($(".gm-style-iw").length > 0) { 
             $(".gm-style-iw").removeAttr("width"); 
             $(".gm-style-iw").each(function() { 
              if (!$(this).find("div.divFirstSnap").length) { 
               $(this).addClass("wiThouImage"); 
              } 
             }) 

             clearInterval(checkExist); 
            } 

           }, 1000); 
          } 

          //Following section is used to manage device pop-ups after ajax 
          for (var i = 0; i < infoWindowDevicePoints.length; i++) { 
           infoWindowDevicePoints[i].latLng 
           if (position == infoWindowDevicePoints[i].latLng) 
            isExist = false; 
          } 

          if (isExist) { 
           infoWindowDevicePoints.push({ 
            latLng: beachMarker.position, 
            popUpData: beachMarker.desc 
           }); 
          } 
          UnBlockGlanceScreen(); 
         } 
        }); 
        } 
      }); 
      google.maps.event.addListener(infoWindow, "closeclick", function() { 
       debugger; 

       var that = this; 
       that.getposition() 
       var latlnginfo = that.getposition(); 
       infowindowdevicepoints = $.grep(infowindowdevicepoints, function (value) { 
        return value.latlng != latlnginfo; 
       }); 
      }); 

       oms.addListener('spiderfy', function() { 
        infoWindow.close(); 
        infoWindowDevicePoints.length = 0; 
       }); 
       oms.addMarker(beachMarker); 

      } 

     }); 


}); 

Заранее благодарим за предоставленную помощь.

+0

Вы добавляете 'closeclick' слушателей событий в 5 различные места. Выполняется ли кто-нибудь из них? Ваш код довольно сложный, более 400 строк. Можете ли вы упростить его для [MCVE] (http://stackoverflow.com/help/mcve) для этого вопроса? – duncan

+0

Привет, Дункан, я сократил строки кода, чтобы яснее понять. Infowindow открывается, но событие closeclick не срабатывает. Я пытался держать события в другом месте, чтобы проверить, работает ли он там, но не напрасно. Также есть много других мест, где Infowindow появляется в разных условиях. – Vijay

+0

Вы создаете infowindow внутри вашего обработчика успеха ajax. Вы уже определили его как глобальную переменную? В тот момент, когда вы прикрепляете обработчик события closeclick, что вы получаете, если просто выполняете 'console.log (infoWindow)'? – duncan

ответ

1

Проблема в том, что вы создаете infoWindow только в ответ на запрос ajax. Однако, когда вы добавляете прослушиватель событий closeclick, это, вероятно, выполняется до того, как произошел ответ ajax.

Вам нужно переместить этот блок:

google.maps.event.addListener(infoWindow, "closeclick", function() { 
    debugger; 

    var that = this; 
    that.getposition() 
    var latlnginfo = that.getposition(); 
    infowindowdevicepoints = $.grep(infowindowdevicepoints, function(value) { 
     return value.latlng != latlnginfo; 
    }); 
}); 

... внутри этого блока, после того, как заявление, если-то еще, который создает InfoWindow

$.ajax({ 
    ... 
    success: function(result) { 
      // add a call to the event listener here 
    } 
+0

Спасибо за вашу помощь. Дункан, правильное место, где он работал, находится под 'var checkExist = setInterval (function() {});'. Работаю сейчас. Еще раз спасибо. – Vijay

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

  • Нет связанных вопросов^_^