设置加载后的复选框状态

Setting checkbox states after load

本文关键字:复选框 状态 加载 设置      更新时间:2023-09-26

我在设置自定义Google Maps API v3覆盖的可见性方面遇到了问题。我有一个gmaps API页面与各种覆盖,如多边形,折线和符号。每个都有一个相关的文本标签,使用自定义覆盖,我改编自[这个Stack Overflow帖子][1]的答案

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

叠加被存储为一个名为'overlays'的对象,布局为'description: [polyline, 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不存在

解决这个问题的一种方法是在页面加载后自动循环所有复选框状态(手动执行以解决此问题)。也许有一个更根本的解决办法。无论我在哪里尝试。hide()或。show()在我的javascript标签,它不工作-它只工作时被选中的复选框被点击。

问题是当你调用refreshChecks()时。

您假设此时已经添加了TxtOverlay's,但事实并非如此(这就是为什么div_'s仍然为空)。

地图上的txoverlay 's(像任何物体/形状)将在地图的投影准备好时添加。

一种可能的方法是:

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

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