加载后设置复选框状态

时间:2014-05-08 18:32:30

标签: javascript html google-maps google-maps-api-3

我在设置自定义Google Maps API v3叠加层的可见性时遇到问题。我有一个带有各种叠加层的gmaps API页面,例如多边形,折线和符号。每个都有一个相关的文本标签,使用自我改编自[this Stack Overflow post] [1]

的答案改编而成

在页面加载时,实际叠加(折线,多边形,标记等 - 内置API对象)可正常工作。它们基于默认复选框状态显示。但是,无论是否默认设置了复选框,都会显示标签。如果我循环复选框,一切正常。

叠加层存储为名为'叠加的对象'布局'描述:[折线,customoverlaylabel]'

复选框示例代码:

<input type="checkbox" id="sun" onclick="refreshCheck('sun')">Sun</input>

这是我同步显示屏是隐藏还是可见的方式:

  function refreshCheck(overlay) {
                var box = document.getElementById(overlay).checked
                var lines = overlays[overlay][0]
                var text = overlays[overlay][1]
                lines.setVisible(box, overlay)
                if (box === true) {
                    text.show()
                }
                else {
                    text.hide()
                }
            }

此代码刷新javascript头末尾的所有复选标记。

var overlayNames = []
for (var k in overlays) overlayNames.push(k)
for (var o in overlayNames) refreshCheck(overlayNames[o])

这是自定义文字叠加的隐藏方法:

       TxtOverlay.prototype.hide = function(){
            if (this.div_) {
                this.div_.style.visibility = "hidden";
            }
        }

它没有通过if(this.div_)检查,也没有做任何事情。如果我删除了检查,则会产生错误,因为此div_不存在。

解决这个问题的一种方法是在页面加载后自动循环所有复选框状态(手动执行以解决它)。可能有一个更基本的修复。无论我在我的javascript中尝试使用.hide()或.show()标签,它都不起作用 - 只有在被点击的复选框引用时它才有效。

1 个答案:

答案 0 :(得分:1)

问题是您拨打refreshChecks()时的问题。

您认为此时已经添加了TxtOverlay,但情况并非如此(这就是为什么div_仍然为空)。

当地图投影准备就绪时,将添加地图上的TXToverlay(与任何对象/形状一样)。

可能的方法是:

而不是使用形状/标记/等的visible - 属性。切换其可见性使用map - 属性。

TXTOverlay也是MVCObject,你只需要将TXTOverlay的map - 属性绑定到相关形状的map - 属性。