- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道有一些与相关标题相关的问题,但我没有找到适合我的答案。
这是我的问题:
我正在尝试打印通过数据库生成的 map ,其中包含多个标记。我在 map 下方有一些复选框,可以让我过滤 map 上的标记。
因此,我第一次加载 map 时,所有内容都经过了很好的过滤(取决于默认检查的内容),因为我并不真正了解如何在 map 初始化后添加/删除标记。我是否必须重新加载 map ,或者我是否遗漏了什么?
相关代码如下:
<form>
<input class="test" type="checkbox" name="type" value="1" onclick="test()" checked/>1<br/>
<input class="test"type="checkbox" name="type" value="2" onclick="test()" checked/>2<br/>
<input class="test"type="checkbox" name="type" value="3" onclick="test()" checked/>3<br/>
<input class="test"type="checkbox" name="type" value="4" onclick="test()" checked/>4<br/>
<script>
var checkedValues = $('input:checkbox:checked').map(function() {
return this.value;
}).get().join('-');
function fetchPlace(filtreType){
$.ajax({
url: "ajaxmap.php?type=" + filtreType,
type : 'GET',
dataType: 'json',
success : function(data) {
// Loop through our array of markers & place each one on the map
for( i = 0; i < data.marker.length; i++ ) {
var myLatlng = new google.maps.LatLng(data.marker[i].log,data.marker[i].lat);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Hello World!'
});
}
}
,
error: function(){
/// traiter les erreur
},
async : true
});
};
function test (){
var checkedValues = $('input:checkbox:checked').map(function() {
return this.value;
}).get().join('-');
fetchPlace(checkedValues);
};
fetchPlace(checkedValues);
感谢您提供的任何帮助。
孤独
最佳答案
这是我所做的:
这 2 个坐标数组对应于您在 AJAX 成功中获得的结果。
markers
是一个数组。在 addMarkers
函数中,我创建了一个包含过滤器类型值的数组。类似 markers[filterType] = new Array()
;
这样,您现在可以轻松识别每种类型的标记并打开或关闭它们。
当然,您需要根据您的需要进行调整(我使用了按钮,您使用了复选框等),也许您只需要加载标记一次,等等。但是您应该能够明白这个想法。
var map;
var markers = new Array();
var coords_1 = [
new google.maps.LatLng(60.32522, 19.07002),
new google.maps.LatLng(60.45522, 19.12002),
new google.maps.LatLng(60.86522, 19.35002),
new google.maps.LatLng(60.77522, 19.88002),
new google.maps.LatLng(60.36344, 19.36346),
new google.maps.LatLng(60.56562, 19.33002)];
var coords_2 = [
new google.maps.LatLng(59.32522, 18.07002),
new google.maps.LatLng(59.45522, 18.12002),
new google.maps.LatLng(59.86522, 18.35002),
new google.maps.LatLng(59.77522, 18.88002),
new google.maps.LatLng(59.36344, 18.36346),
new google.maps.LatLng(59.56562, 18.33002)];
function initialize() {
var mapOptions = {
zoom: 7,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(59.76522, 18.35002)
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
$('button').on('click', function() {
if ($(this).data('action') === 'add') {
addMarkers($(this).data('filtertype'));
} else {
removeMarkers($(this).data('filtertype'));
}
});
}
function addMarkers(filterType) {
var temp = filterType === 'coords_1' ? coords_1 : coords_2;
markers[filterType] = new Array();
for (var i = 0; i < temp.length; i++) {
var marker = new google.maps.Marker({
map: map,
position: temp[i]
});
markers[filterType].push(marker);
}
}
function removeMarkers(filterType) {
for (var i = 0; i < markers[filterType].length; i++) {
markers[filterType][i].setMap(null);
}
}
initialize();
所以就你的情况而言,你可以这样做:
var markers = new Array(); // declare this at the beginning of your script
...
// Loop through our array of markers & place each one on the map
markers[filtreType] = new Array();
for (i = 0; i < data.marker.length; i++) {
var myLatlng = new google.maps.LatLng(data.marker[i].log, data.marker[i].lat);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Hello World!'
});
markers[filtreType].push(marker);
}
编辑:
另一个解决方案是将过滤器类型添加到标记本身并将所有标记推送到同一数组。您仍然可以识别它们。
var markers = new Array(); // declare this at the beginning of your script
...
// Loop through our array of markers & place each one on the map
for (i = 0; i < data.marker.length; i++) {
var myLatlng = new google.maps.LatLng(data.marker[i].log, data.marker[i].lat);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: 'Hello World!',
filterType: filtreType
});
markers.push(marker);
}
现在,如果您想删除某种过滤器类型的标记,您可以执行以下操作:
function removeMarkers(filterType) {
for (var i = 0; i < markers.length; i++) {
if (marker.filterType === filterType) {
markers[i].setMap(null);
}
}
}
注意:我不知道这是否是一个拼写错误,但请确保您没有混淆 filterType
和 filtreType
。我会将所有内容更改为 filterType
以避免混淆...
关于javascript - 谷歌地图API,初始化 map 后在ajax中添加标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29806300/
我是 Spring 新手,这就是我想要做的事情: 我正在使用一个基于 Maven 的库,它有自己的 Spring 上下文和 Autowiring 字段。 它的bean配置文件是src/test/res
我在我的测试脚本中有以下列表初始化: newSequenceCore=["ls", "ns", "*", "cm", "*", "ov", "ov", "ov", "ov", "kd"] (代表要在控
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Class construction with initial values 当我查看 http://en.
我得到了成员变量“objectCount”的限定错误。编译器还返回“ISO C++ 禁止非常量静态成员的类内初始化”。这是主类: #include #include "Tree.h" using n
我有如下所示的a.h class A { public: void doSomething()=0; }; 然后我有如下所示的b.h #include "a.h" class b: publi
我需要解析 Firebase DataSnapshot (一个 JSON 对象)转换成一个数据类,其属性包括 enum 和 list。所以我更喜欢通过传递 DataSnapshot 来手动解析它进入二
我使用 JQuery 一段时间了,我总是使用以下代码来初始化我的 javascript: $(document).ready( function() { // Initalisation logic
这里是 Objective-C 菜鸟。 为什么会这样: NSString *myString = [NSString alloc]; [myString initWithFormat:@"%f", s
我无法让核心数据支持的 NSArrayController 在我的代码中正常工作。下面是我的代码: pageArrayController = [[NSArrayController alloc] i
我对这一切都很陌生,并且无法将其安装到我的后端代码中。它去哪里?在我的页脚下面有我所有的 JS? 比如,这是什么意思: Popup initialization code should be exec
这可能是一个简单的问题,但是嘿,我是初学者。 所以我创建了一个程序来计算一些东西,它目前正在控制台中运行。我决定向其中添加一个用户界面,因此我使用 NetBeans IDE 中的内置功能创建了一个 J
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
据我所知, dependentObservable 在声明时会进行计算。但如果某些值尚不存在怎么办? 例如: var viewModel ={}; var dependentObservable1 =
我正在阅读 POODR 这本书,它使用旧语法进行默认值初始化。我想用新语法实现相同的功能。 class Gear attr_reader :chainring, :cog, :wheel de
我按照 polymer 教程的说明进行操作: https://www.polymer-project.org/3.0/start/install-3-0 (我跳过了可选部分) 但是,在我执行命令“po
很抱歉问到一个非常新手的Kotlin问题,但是我正在努力理解与构造函数和初始化有关的一些东西。 我有这个类和构造函数: class TestCaseBuilder constructor(
假设我们有一个包含 30 列和 30 行的网格。 生命游戏规则简而言之: 一个小区有八个相邻小区 当一个细胞拥有三个存活的相邻细胞时,该细胞就会存活 如果一个细胞恰好有两个或三个活的相邻细胞,那么它就
我是 MQTT 和 Android 开放附件“AOA” 的新手。在阅读教程时,我意识到,在尝试写入 ByteArrayOutputStream 类型的变量之前,应该写入 0 或 0x00首先到该变量。
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
我有一个inotify /内核问题。我正在使用“inotify” Python项目进行观察,但是,我的问题仍然是固有的关于inotify内核实现的核心。 Python inotify项目处理递归ino
我是一名优秀的程序员,十分优秀!