如果存在则显示“查看围栏”按钮但如果不存在则显示“无围栏”按钮

时间:2012-10-11 16:44:17

标签: javascript jquery

我有一个标记对象,关键是联系人姓名。 还有一组具有“联系”项目的对象,该项目也是联系人姓名。

我正在尝试检测联系人是否存在来自对象数组的现有“地理围栏”并显示“查看围栏”按钮,如果没有则显示“禁止围栏”按钮。

围栏存储在名为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按钮。

我是以错误的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

文斯,没有看到'fencesCookie'中的内容或者你的'标记'对象中的内容很难说,但它要么是:

  1. [不太可能]你的'markers'对象中有多个匹配的id,并且它导致'(markers [key] .id === id)'每次都给出一个肯定的结果并且跳进饼干循环再次。

  2. [最有可能]你对'fencesCookie'中匹配键的测试在所有情况下失败,除非它匹配,所以你要为'fenceCookie'中的每个键打印出一个'No Fence'按钮只有一把钥匙。

  3. 我改变了顺序,并在循环结束后添加了一个变量来检查匹配。 试试这个(或类似的东西):

    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)
                    }
                }
            }
        }   
    }