我有一个标记对象,关键是联系人姓名。 还有一组具有“联系”项目的对象,该项目也是联系人姓名。
我正在尝试检测联系人是否存在来自对象数组的现有“地理围栏”并显示“查看围栏”按钮,如果没有则显示“禁止围栏”按钮。
围栏存储在名为fencesCookie
代码:
function fenceButton(id) {
for (var key in markers) {
if (markers[key].id === id) {
$.each(fencesCookie, function (i, f) {
if (key === f.contact) {
menu.add(strings[strLang].viewfence, 'fence',
function(){
viewFence(f.lat, f.lng, f.radius);
menu.close();
});
} else {
console.log("No Fence : "+key+" "+f.contact)
}
});
if ($.isEmptyObject(fencesCookie)) {
menu.add('No Fence', 'nofence',
function(){
menu.close();
});
}
}
}
}
console.log正在吐出所有不匹配的项目,因此在这里添加“No Fence”按钮代码会产生多个按钮,而不仅仅是一个View或No Fence按钮。
我是以错误的方式解决这个问题吗?
答案 0 :(得分:1)
[不太可能]你的'markers'对象中有多个匹配的id,并且它导致'(markers [key] .id === id)'每次都给出一个肯定的结果并且跳进饼干循环再次。
[最有可能]你对'fencesCookie'中匹配键的测试在所有情况下失败,除非它匹配,所以你要为'fenceCookie'中的每个键打印出一个'No Fence'按钮只有一把钥匙。
我改变了顺序,并在循环结束后添加了一个变量来检查匹配。 试试这个(或类似的东西):
function fenceButton(id) {
for (var key in markers) {
if (markers[key].id === id) {
// set a variable to test if we find a match
// we'll set it to true if we find one
var match = false;
// Test that fencesCookie exists
if ($.isEmptyObject(fencesCookie)) {
// if not
menu.add('No Fence', 'nofence',
function(){
menu.close();
});
} else {
// if it does
$.each(fencesCookie, function (i, f) {
// loop through the cookie and match on the f.contact
if (key === f.contact) {
// set match to true
match = true;
// create the 'view' button
menu.add(strings[strLang].viewfence, 'fence',
function(){
viewFence(f.lat, f.lng, f.radius);
menu.close();
});
}
});
// The loop is done so test 'match' to see if we found a match
if (match === false) {
// No matches so create the 'No Fence' button
console.log("No Fence : "+key+" "+f.contact)
}
}
}
}
}