Javascript document.getElementById(“side”bar“)。innerHTML mktree在Firefox上工作,但在Chrome或IE上不工作

Javascript document.getElementById(“side”bar“)。innerHTML mktree在Firefox上工作,但在Chrome或IE上不工作,javascript,internet-explorer,google-chrome,firefox,Javascript,Internet Explorer,Google Chrome,Firefox,我有一个谷歌地图应用程序正在开发中。侧栏是动态构建的,并使用mktree(from)折叠视图 该页面在Firefox中显示OK(即折叠侧栏),但在Chrome或ie中不显示OK(即折叠侧栏),其中无序列表全部显示(没有[+]按钮)-至少对我来说是这样。我注意到,在Firefox中,侧边栏的格式有时不正确,但在重新加载页面时可以。在javascript控制台中没有发现错误 我捕获了动态创建的侧栏HTML,将其放在测试页面中,这在所有三种浏览器中都显示良好 我意识到我没有包含任何代码片段,但我不知道

我有一个谷歌地图应用程序正在开发中。侧栏是动态构建的,并使用mktree(from)折叠视图

该页面在Firefox中显示OK(即折叠侧栏),但在Chrome或ie中不显示OK(即折叠侧栏),其中无序列表全部显示(没有[+]按钮)-至少对我来说是这样。我注意到,在Firefox中,侧边栏的格式有时不正确,但在重新加载页面时可以。在javascript控制台中没有发现错误

我捕获了动态创建的侧栏HTML,将其放在测试页面中,这在所有三种浏览器中都显示良好

我意识到我没有包含任何代码片段,但我不知道哪些代码片段是相关的,尤其是当侧栏html独立工作时

稍后进行更多调试:我将侧栏作为静态html(使用与动态创建时提取的html完全相同的html)放入,并在所有三种浏览器上运行(即压缩并显示[+]按钮)

所以我的问题似乎源于使用

document.getElementById("side_bar").innerHTML = side_bar;
而且它没有被Chrome和IE(偶尔也会被Firefox)完全处理,这可能与填充google地图所做的所有其他处理有关

正在重新加载此元素的网页为:

    <table border=1>
      <tr>
      <td>
         <div id="map" style="width: 950px; height: 750px"></div>
      </td>
      <td width = 300 valign="top" style="color: #4444ff;">
         <div id="side_bar"  style="overflow:auto; height:750px;">
           *** static HTML inserted here and it works
         </div>
      </td>
      </tr>
    </table>

***在这里插入静态HTML,它可以正常工作

稍后还有更多调试:我尝试了移动处理,以便在调用Google Maps创建地图和绘制标记之前创建并重写侧栏,但侧栏的格式仍然不正确。

问题在于:有两段代码的执行顺序并不总是相同

有一个
getPlaces()
函数,通过小工具onload处理程序调用该函数:

gadgets.util.registerOnLoadHandler(getPlaces);
addEvent(window,"load",convertTrees);
此函数为回调发出带有
gotPlaces
的异步请求:

gadgets.io.makeRequest(url, gotPlaces, params);
gotPlaces()
调用
Load\u Arrays()
,然后调用
Create\u Sidebar()

Create_Sidebar()
是插入Sidebar innerHTML的地方:

document.getElementById("side_bar").innerHTML = side_bar;
这个
innerHTML
在所有情况下都可以正常工作;这不是问题所在

现在,您希望在此之后调用
convertTrees()
。此函数调用
processList()
,在每个ULs上设置类

如何调用
convertTrees()
?来自另一个onload处理程序-以及不同类型的onload处理程序:

gadgets.util.registerOnLoadHandler(getPlaces);
addEvent(window,"load",convertTrees);
但是在列表没有正确折叠的情况下,
convertTrees()
调用得太早了-在
CreateSidebar()之前

毫不奇怪,这是相当不确定的

如何修复它

我认为最简单的方法可能是删除
convertTrees()
的onload处理程序,而是在正确的时间直接从代码中调用此函数。例如,您可以在
Create\u Sidebar()
调用之后的
Load\u Arrays()
末尾调用
convertTrees()

顺便说一句,如果你能冲出谷歌小工具的牢笼,在一个普通的非小工具HTML页面上测试你的代码,那么调试代码就容易多了。很难将Firebug或Chrome开发工具等普通开发工具与gadget代码一起使用,因为它们通过URL频繁更改的
加载实际代码。当这种情况发生时,您将丢失在旧URL下设置的所有断点


当然,如果您自己编辑代码,您可以使用
调试器语句,您希望在其中设置断点,而不是像我那样单击调试器-因此在实践中,这可能不是一个真正的问题。

当您的帖子出现时,我几乎发现了它。我删除了调用convertTrees的事件处理程序,并在编辑侧边栏后自己调用了它,效果非常好。我确实在本地测试了代码,而不是在谷歌的Gadget监狱(但我仍然在努力对付Firebug)。