jqTree 在 IE11 中不执行保存状态工作正常 FF12.

jqTree not performing saveState in IE11 works fine FF12

本文关键字:工作 状态 FF12 保存 执行 IE11 jqTree      更新时间:2023-09-26

我正在开发一个Web应用程序,并且正在使用jqTree插件作为树菜单。我在创建树时使用 saveState 参数。它在FireFox 12中工作正常,即它在刷新时记住树的状态(使用localStorage),但在Internet Explorer 11中,它不会将数据保存到localStorage或作为cookie(我已经根据jqTree作者的说明添加了JQuery cookie,我可以很好地读写cookie)。

出于无奈,我把一个开放节点的列表作为字符串保存到localStorage中,然后尝试遍历列表,使用jqTree的openNode函数打开节点。这也行不通。任何人都可以建议任何解决方法/修复方法吗?谢谢。:)

附言它在IE11中崩溃,并在tree.jquery.js的第1839行显示错误消息"'JSON'未定义"。

更新:通过将 js_json2.js 添加到配置并将 tree.jquery.js 的第 1839 行更改为

state = JSON.stringify(this.getState(),undefined); //added undefined as second argument
但是现在折叠的节点

正确显示展开/折叠图标,但应该不可见的子节点仍显示如下:

▼节点1ajax

儿童

1 儿童2

▼节点2

儿童3

►儿童4

子2

在这种情况下,sub2 不应该可见,而是可见的。

错误消息JSON is undefined是这里的重要线索。

JSON API是一个标准化的API,目前所有浏览器都支持,包括IE11和Firefox(是的,甚至可以追溯到FF12)。

那么,为什么IE11在支持它时会说它是未定义的呢?

只有一个可能的原因:IE 必须处于向后兼容模式,该模式将删除对 JSON API 的支持。

这可能有两种可能的模式:IE7 兼容模式或 Quirks 模式。解决方案取决于您所处的模式。

您可以通过按 F12 调出浏览器开发工具并转到"仿真"选项卡来找出您所在的位置。如果它显示的数字是"7",那么你处于IE7模式,如果它是5,那么你处于怪癖模式。

    怪癖模式
  • :如果您的 HTML 代码没有有效的文档类型,所有版本的 IE 都将回退到怪癖模式。您也可以使用某些类型的无效 HTML 触发它,但缺少文档类型是迄今为止最常见的原因。

    因此,请确保您的 HTML 页面都以如下所示的行开头:<!DOCTYPE html> .这应该确保您没有处于怪癖模式。(其他有效的文档类型也可以,但这是最容易使用的)。

    此外,通过 W3C 验证器运行您的 HTML,以确保您没有任何可能影响它的损坏 HTML。

  • IE7 兼容模式:这通常由浏览器设置触发,尤其是在公司网络环境中。您可以通过指定X-UA-Compatible元标记来覆盖它。您可以通过将以下行添加到 HTML 代码的<head>部分来执行此操作:

执行上述两项操作,浏览器应该进入标准模式,这应该意味着您会发现IE11开始表现得更好。您不再需要添加js_json2.js,并且您可能可以撤消为尝试解决它所做的所有其他"修复"。

希望有帮助。