首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Google加载后选中复选框值

在Google加载后选中复选框值
EN

Stack Overflow用户
提问于 2017-04-07 07:15:58
回答 1查看 280关注 0票数 0

我想我缺少一些关于javascript的基本内容。我需要你的帮助!

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

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

简化代码:

代码语言:javascript
复制
//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()会加载。如果映射加载时复选框为真,则redo()函数将处理zoom/drag。但是,即使在将值更改为false之后(如果页面加载时值为false,则会发生相反的情况),它仍然会这样做。

要让redo()看到值发生了变化,需要什么?push()bind()?准备好了?change()addEventListener()?当复选框被切换时,我是否应该重新加载地图(我不想)?全新的方法?我被卡住了!谢谢。我对JQuery的想法也很开放。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-08 07:11:53

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

代码语言:javascript
复制
function redo() {
  if ($("#followCheck").is(':checked')) {
    google.maps.event.addListener(map, 'mouseup', function() {
      mapAdjusted = 1;
      updateMapAfterUserInteraction();
    });
    google.maps.event.addListener(map, 'zoom_changed', function() {
      mapAdjusted = 1;
      updateMapAfterUserInteraction();
    });
  }
}

问题是它没有关掉。这是因为我增加了两个侦听器!This answer帮助我删除了侦听器。请注意(对我而言)它只在removeListener()函数位于addListener()函数内时才能工作。有点奇怪。

代码语言:javascript
复制
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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43271926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档