Javascript 在谷歌地图加载后检查复选框值

Javascript 在谷歌地图加载后检查复选框值,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我想我缺少了一些关于javascript的基本知识。我需要你的帮助 场景:单击“搜索”后,将加载谷歌地图。加载时,会出现一个复选框,上面写着“移动地图时重做结果”(类似于yelp)。如果拖动或缩放地图,结果将更新。那部分很好用 问题:映射加载时,redo()函数会识别复选框的值(true或false),并且在加载后不会再次检查它(因为即使redo()正在更新结果,也不会重新加载映射)。因此,如果您切换复选框,“重做”功能不会注意到 简化代码: //HAML %input{:type =>

我想我缺少了一些关于javascript的基本知识。我需要你的帮助

场景:单击“搜索”后,将加载谷歌地图。加载时,会出现一个复选框,上面写着“移动地图时重做结果”(类似于yelp)。如果拖动或缩放地图,结果将更新。那部分很好用

问题:映射加载时,
redo()
函数会识别
复选框的值(true或false),并且在加载后不会再次检查它(因为即使
redo()
正在更新结果,也不会重新加载映射)。因此,如果您切换复选框,“重做”功能不会注意到

简化代码:

//HAML
%input{:type => "checkbox", :id => "followCheck", :name => "followCheck", :onclick => 'handleClick();'}

//load the map
function showLocations() { 
  map = new google.maps.Map(document.getElementById("map_canvas"), {
    bunch of map stuff;
    map.fitBounds(bounds);
    redo(); //this is the redo function, see below
  }
}

function handleClick(checkbox) {
  var chk = document.getElementById("followCheck").checked;
  console.log("checkbox value is currently " + chk);
  return chk;
}

function redo() {
  var chk = handleClick();
  console.log("inside redo, value is " + chk);
   if (chk == true) {
     google.maps.event.addListener(map, 'mouseup', function() {
       mapAdjusted = 1;
       updateMapAfterUserInteraction();
     });
     google.maps.event.addListener(map, 'zoom_changed', function() {
       mapAdjusted = 1;
       updateMapAfterUserInteraction();
     });
   }
}
(请注意,redo()函数是由我的合作者编写的,他比我聪明,目前在外地。)

因此,当映射加载时,
Redo()。如果贴图加载时复选框为true,则
redo()
函数将处理
缩放/拖动
。但即使将该值更改为false,它仍然会执行该操作(如果在加载页面时该值为false,则会发生相反的情况)


获取
redo()
需要什么才能看到值已更改<代码>推送()
<代码>绑定()
?准备好了吗<代码>更改()<代码>addEventListener()?我是否应该在切换复选框时重新加载地图(我不希望)?一个全新的方法?我卡住了!谢谢我也乐于接受JQuery的想法。

我解决了这个问题。首先,通过对函数进行一个小的调整,我能够在选中该框后将其打开(即使在通过上一个页面会话取消选中该框时加载了结果)。下面是代码(我实际上发现了三种变体,它们都有相同的结果):

问题是它没有关闭。这是因为我添加了两个侦听器!帮我清除了听众。请注意(对我来说),它仅在
removeListener()
函数位于
addListener()函数中时才起作用。有点奇怪

function redo() {
  var listener1 = google.maps.event.addListener(map, 'mouseup', function() {
    if (!$("#followCheck").is(':checked')) {
      google.maps.event.removeListener(listener1);
    } else {
      mapAdjusted = 1;
      updateMapAfterUserInteraction();
    }
  });
  var listener2 = google.maps.event.addListener(map, 'zoom_changed',  function() {
    if (!$("#followCheck").is(':checked')) {
      google.maps.event.removeListener(listener2);
    } else {
      mapAdjusted = 1;
      updateMapAfterUserInteraction();
    }
  });
}
哦,我也把
onclick()
改成了
onchange()

function redo() {
  var listener1 = google.maps.event.addListener(map, 'mouseup', function() {
    if (!$("#followCheck").is(':checked')) {
      google.maps.event.removeListener(listener1);
    } else {
      mapAdjusted = 1;
      updateMapAfterUserInteraction();
    }
  });
  var listener2 = google.maps.event.addListener(map, 'zoom_changed',  function() {
    if (!$("#followCheck").is(':checked')) {
      google.maps.event.removeListener(listener2);
    } else {
      mapAdjusted = 1;
      updateMapAfterUserInteraction();
    }
  });
}