【问题标题】:jsTree stuck on "loading" on IE8jsTree 卡在 IE8 上的“正在加载”
【发布时间】:2011-07-06 12:41:54
【问题描述】:

我在两个不同的页面中有树,都有很多其他的 功能也。它们在 Firefox 中都可以正常工作,但 IE8 卡住了 在“加载..”上,没有明显的错误消息(我没有任何 为 IE8 安装了 devtools,因为我什么都不知道)。

我在网上看了,发现我应该声明一个doctype,它 我做了,但没有帮助。我还尝试将页面剥离到 bare essentials+jstree,但是树还是不行。

这是代码。我已经取出了一些我认为不是的部分 必不可少(尽管考虑到问题,它们可能是)。

我想我在 jstree 主页的某个地方看到了一些关于 变量名和 IE 不兼容 - 例如“使用 id 而不是名字”?我的问题可能是因为这样的事情吗? 我也明白一些IE问题是因为IE的奇怪方式 处理版本(或其他东西,我不太明白)。什么 这是否意味着,这可能是我的问题的根源吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/
TR/xhtml11/DTD/xhtml11.dtd">

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
-SNIP-
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/
jqueryui/1.8.3/themes/base/jquery-ui.css" type="text/css" />
   <script src="<%= hostUrl %>/js/jquery-1.4.2.js" type="text/
javascript"></script>
   <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/
jquery-ui.js" type="text/javascript"></script>
   <script src="http://jquery-ui.googlecode.com/svn/tags/latest/external/
jquery.bgiframe-2.1.1.js" type="text/javascript"></script>
   <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.3/i18n/
jquery-ui-i18n.min.js" type="text/javascript"></script>
<script src="<%= hostUrl %>/js/jsTree/jquery.jstree.js" type="text/
javascript"></script>
   <link rel="stylesheet" type="text/css" href="/WebUI2/js/jsTree/themes/
css/style.css" />
   <script type="text/javascript" src="/WebUI2/js/jsTree/themes/js/
jquery-ui-1.8.13.custom.min.js"></script>
-SNIP-
<script>


$(function () {

   $("#tree")

   .jstree({
           "json_data" : {
                   "ajax" : {
                           "url" : "getAreaTree?treeType=Areas&ownerPhone=<
%=webSessionObject.getUserPhoneNum()%>",
                           "data" : function (n) {
                       return { id : n.attr ? n.attr("id") : 0 };
                   }
                   }
           },

           types : {
                   types : {

                           "folder" : {

                           },
                           "file" : {
                                   "valid_children" : "none"
                           }
                   }
           },

           checkbox : {
                   "real_checkboxes" : "true",
                   "override_ui" : "true",
                   "real_checkboxes_names" : function(n){
                           console.log("Aasd");
                           return[("area"+n[0].id),n[0].id];
                   }
           },

           themes : {
                   theme : "apple"
           },

           "plugins" : ["json_data", "ui", "checkbox", "types", "themes" ]
   });




});
</script>

<div class="box_start">
 <div class="box_content">
   <h1><fmt:message key="owner.text.areas" /></h1>
    <div id="tree"style="overflow:auto border:none"></div>
       <br />
   </div>
   <div class="box_end"></div>
 </div>

这个复制粘贴是给另一个论坛的,我已经做了一些改变。我已将 jQuery 更新为最新版本 (1.6.2),并且删除了一些自闭合标签(链接、输入、中断)。

这是我的 JSON 的 sn-p(它不是整个 JSON,因此括号中可能存在错误)。更新版本使用“idx”而不是“x”,x 是一个数字。

[{ "data" : "Areas", "attr" : { "id" : "1", "rel" : "folder" }, "state" : "open",
"children" : [{ "data" : "[Testi]", "attr" : { "id" : "261", "rel" : "folder" },  
"state" : "closed", 
"children" : [ ] } , { "data" : "TESTI", "attr" : { "id" : "11", "rel" : "folder" },   
"state" : "closed", 
"children" : [{ "data" : "[ Kansio ]", "attr" : { "id" : "271", "rel" : "folder" }, 
"state" : "closed", 
"children" : [ ] } , { "data" : "[ folder ]", "attr" : { "id" : "281", "rel" : 
"folder" }, "state" : "closed", 
"children" : [ ] } ] }]

附言。很抱歉格式不好,仍然无法处理 SO ^^;;

【问题讨论】:

  • 我通过 jsLint 运行 JSON,结果很糟糕。我修复了错误(一些愚蠢的东西,比如不应该有空格的地方),但 IE 仍然无法正常工作。我下载了 IE 的 DebugBar,但它没有报告任何错误——只是一些关于 html 标签的警告。我大吃一惊。

标签: jquery json internet-explorer internet-explorer-8 jstree


【解决方案1】:

嗯,是的,我找到了答案。 IE8 挂起,因为树太大。我从 json 中删除了大约一半的条目,并且树加载得很好。

如果我找到解决方法,我会报告。

edit:我更新了 OpenLayers(另一个开源插件,这个是用来绘制地图的)并且 jsTree 开始工作了。我以为我使用了最新版本的 OpenLayers,但几天前我们的 svn 出现了问题,所以我想我毕竟不是在使用绝对最新版本。

因此,这个问题得到了回答。我会在一两天内删除,因为我怀疑这对任何人都有帮助(“如果你使用 jstree 和旧版本的 OpenLayers,IE8 可能会挂起”..?正确)。如果问题再次出现,我宁愿开始一个新问题,也不愿在这里继续。

【讨论】:

  • 您可以将节点设置为按需加载。设置“state”:“open”但“children”:[],这将调用具有nodeID的java来展开
【解决方案2】:

您的 ID 不应是数字,因为 DOM 无法处理元素 ID 的某些情况。纯数字,不允许使用这些字符 (!"#$%&amp;'()*+,./:;&lt;=&gt;?@[\]^{|}~`)。 使用 id1 而不是 1。

我发现 jstree 自 jquery 1.6.2 以来存在一些大问题,并且无法在 jstree google 组中获得任何反馈,所以在继续前进之前也要考虑一下。

我检查了您在上面发布的 json,发现它也不正确:您需要关闭您的初始 [ 和 {

这是正确的 json,除了 ID:

[
    {
        "data": "Areas",
        "attr": {
            "id": "1",
            "rel": "folder"
        },
        "state": "open",
        "children": [
            {
                "data": "[Testi]",
                "attr": {
                    "id": "261",
                    "rel": "folder"
                },
                "state": "closed",
                "children": []
            },
            {
                "data": "TESTI",
                "attr": {
                    "id": "11",
                    "rel": "folder"
                },
                "state": "closed",
                "children": [
                    {
                        "data": "[ Kansio ]",
                        "attr": {
                            "id": "271",
                            "rel": "folder"
                        },
                        "state": "closed",
                        "children": []
                    },
                    {
                        "data": "[ folder ]",
                        "attr": {
                            "id": "281",
                            "rel": "folder"
                        },
                        "state": "closed",
                        "children": []
                    }
                ]
            }
        ]
    }
]

【讨论】:

  • 谢谢,我会检查这是否有帮助。你是说我现在应该坚持使用旧版本的 jQuery 吗?
  • 我现在会推荐它。我也编辑了我的答案来修复你的 json。
  • 好吧,即使这是一个明显的缺陷,修复 id 也无济于事。无论如何,谢谢,我在 jsTree FAQ 中读到 ids 应该以字母开头,但不知何故我从来没有意识到我的不..:p
  • OP 中的 JSON 不正确,因为它不是整个 JSON,应该早点指出这一点。这仍然让我的问题悬而未决。我恢复到 jQuery 1.4.2
  • 我唯一可以推荐的另一件事是在您的 .cs 代码中放置一个断点,以确保实际返回 json 而不会引发异常。如果树在加载时卡住了......我发现它总是我的 json 格式或者 json 没有被传递。
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2011-06-20
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多