为什么IE不能在后退导航中重构一个动态修改的select框?

Why can IE not reconstitute a dynamically modified select box on back navigation?

我有一个表单,它是为 SharePoint 列表自动生成的标准表单之一,我向其中添加了一层 JavaScript 以逐步增强它。一些 select 框是查找。在页面加载时,那些 select 框包括 查找列表中的所有项目 ,而我只需要过滤后的子集。

我尝试使用 CSS 来隐藏不相关的选项,但隐藏选项在浏览器中并不可靠。相反,我使用 jQuery 修改 select 框内容以仅包含我想要的过滤子集。

但是,当用户离开页面然后使用后退按钮返回 return 时,就会出现问题。 IE 还原到 select 框的值 selections 不正确。您可以看到当用户后来保存表单时不知道该事故的问题。

在我看来,IE 并没有预料到我对 select 框的动态修改。我相信 IE 正在记住基于 selectedIndex 属性的 select 离子,而不是实际 selected 值。

Chrome 中没有问题,很好地处理了上述情况。

在向后导航时,我在重建它们之前记录了 select 框 selections,但它们已经不正确了。

有没有人在 IE 中处理过这个问题并解决了它?

在继续使用 front-end 筛选查找列的解决方案之前,您可能需要考虑在目标列表中创建计算列,然后将查找指向该列。

假设您的查找列指向列表 "People" 和列 "Age",但您只希望查找列出 30 岁以下的年龄。而不是查找年龄并使用 JS删除所有超过 30 的选项,在 People 中创建一个名为 "Age_Under_30" 或类似名称的第二列。使用公式 =IF([Age]<30, [Age], "") 使其成为计算列。对于年龄小于 30 的所有记录,这将使其值等于年龄,否则为空白。让您的查找列指向 Age_Under_30 而不是年龄,它只会在您的下拉框中列出 30 岁以下的年龄。

您可以根据需要将其更改为任何列;需要做的就是在计算列中定义过滤条件。


如果这不可能,您仍然可以使用 JavaScript 修复它。您假设 IE 存储所选选项的索引而不是其 DOM 节点或文本是正确的。在删除不需要的选项之前保存 IE 在导航回页面时记住的索引,然后恢复它。

var myselect = $("#myselect")[0],
    saved_index = myselect.selectedIndex,
    nodes_to_remove = $("#3, #4");

nodes_to_remove.remove();

if(myselect.selectedIndex + nodes_to_remove.length !== saved_index) {
    myselect.selectedIndex = saved_index;
}

由于此问题不会在 Chrome(可能还有其他浏览器)中出现,并且不加选择地应用此修复程序会破坏那里的行为,因此我进行了行为检查,仅在浏览器显示存在差异时才执行此操作.如果您对此有任何问题,请告诉我。