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