Internet explorer IE 11(边缘)中输入值(文本/隐藏)为空;“后退”;或者第二次使用history.back()

Internet explorer IE 11(边缘)中输入值(文本/隐藏)为空;“后退”;或者第二次使用history.back(),internet-explorer,microsoft-edge,Internet Explorer,Microsoft Edge,Windows 7 IE 11(边缘)上的前进或后退导航按钮 或者可以使用history.forward(),history.back() 在第一次历史显示中,恢复输入的值, 在第二次历史显示中,输入的值变为空 这是IE11(Edge)的问题吗 Windows 10(Edge)浏览器也会这样做 在兼容模式下,IE 8之前的值不是空的,但IE 9之后的值是空的 在FireFox、Chrome、Safari、Opera中,该值不是空的 示例操作。 输入表格A (1) 在文本框中输入一个值 (2)

Windows 7 IE 11(边缘)上的
前进
后退
导航按钮 或者可以使用
history.forward()
history.back()
在第一次历史显示中,恢复输入的值, 在第二次历史显示中,输入的值变为空

这是IE11(Edge)的问题吗

  • Windows 10(Edge)浏览器也会这样做
  • 在兼容模式下,IE 8之前的值不是空的,但IE 9之后的值是空的
  • 在FireFox、Chrome、Safari、Opera中,该值不是空的
示例操作。
  • 输入表格A

    (1) 在
    文本框中输入一个值

    (2) 按
    发送,转换为输入表格B

  • 输入表格B

    (1) 在
    文本框中输入一个值

    (2) 按
    发送,转换为输入表格C

  • 输入表格C

    (1) 在
    文本框中输入一个值

    (2) 按
    发送,转换到输入表单A

  • 输入表格A

    (1) 按
    back
    按钮输入表格C back

  • 输入表格C。。。将显示第一个历史显示值

    (1) 按
    back
    按钮返回输入表格B

  • 输入表格B。。。将显示第一个历史显示值

    (1) 按
    back
    按钮以输入表格back

  • 输入表格A。。。将显示第一个历史显示值

    (1) 按
    前进
    按钮进入输入表格B

  • 输入表格B。。。第二次历史显示,值为空

    (1) 按
    前进
    按钮前进到输入表单C

  • 输入表格C。。。第二次历史显示,值为空

  • 示例代码(使用JSP创建)。 (但是,描述代码中不使用JSP语句。)

    [history\u back\u test1.jsp]
    输入表格A
    
    [history\u back\u test2.jsp] 输入表格B
    [history\u back\u test3.jsp] 输入表格C

    您可以使用此snip代码:

    $(document).ready(function () {
            $("input[type=text]").each(function () {
                $(this).val($(this).val());
            });
        });
    

    由于没有使用jQuery,我用纯JavaScript确认了效果:

    window.addEventListener("load", function() {
        var elms = document.getElementsByTagName("input");
        for (var i = 0; i < elms.length; i++) {
            var elm = elms[i];
            var elmType = elm.type.toLowerCase();
            if (elmType === "text" || elmType === "hidden") {
                elm.value = elm.value;
            }
        }
    }, false);
    
    window.addEventListener(“加载”,函数(){
    var elms=document.getElementsByTagName(“输入”);
    对于(变量i=0;i
    IE 11(边缘)、IE 10(IE 11兼容模式)、IE 9(IE 11兼容模式)正常


    即使它与FireFox、Chrome、Safari、Opera一起运行也没有问题。

    另一种方法是保持元素中不保留值

    <html>
    <head>
        <meta http-equiv="Pragma" content="no-cache" />
        <meta http-equiv="Cache-Control" content="no-cache" />
        <meta http-equiv="Expires" content="0" />
        <meta http-equiv="Content-Script-Type" content="text/javascript">
        <script type="text/javascript">
        <!--
        var dvs = new DelayInitValueSetter();
        function DelayInitValueSetter() {
            var delayValues = [];
            var thisRef = this;
            var p = DelayInitValueSetter.prototype;
            p.add = function(id, value) {
                var info = new Object();
                info.id = id;
                info.value = value;
                delayValues[delayValues.length] = info;
            };
            p.reset = function() {
                window.setTimeout(function() { dvs.exec(""); }, 0);
            }
            p.exec = function(dvsFlag) {
                if (dvsFlag !== "" || delayValues.length === 0) {
                    return;
                }
                for (var i = 0; i < delayValues.length; i++) {
                    var elm = document.getElementById(delayValues[i].id).previousElementSibling;
                    elm.value = delayValues[i].value;
                }
                thisRef.completeDvsFlag();
            };
            p.getDvsFlag = function() {
                var dvsFlagElm = document.getElementsByName("dvsFlag");
                if (dvsFlagElm === void(0) || dvsFlagElm === null || dvsFlagElm.length === 0) {
                    return "";
                }
                return dvsFlagElm[0].value;
            };
            p.completeDvsFlag = function() {
                var dvsFlagElm = document.getElementsByName("dvsFlag");
                if (dvsFlagElm === void(0) || dvsFlagElm === null || dvsFlagElm.length === 0) {
                    return;
                }
                for (var i = 0; i < dvsFlagElm.length; i++) {
                    dvsFlagElm[i].value = "completed";
                }
            };
            window.addEventListener('load', function() {dvs.exec(dvs.getDvsFlag());}, false);
        }
        -->
        </script>
    </head>
    <body>
        Input form A
        <form action="history_back_test2.jsp" method="post">
            <input type="text" id="idval1" name="a1"><script id="dvs1">dvs.add("dvs1","");</script>
            <input type="text" id="idval2" name="a2"><script id="dvs2">dvs.add("dvs2","123");</script>
            <input type="text" id="idval3" name="a3"><script id="dvs3">dvs.add("dvs3","ABC");</script>
            ...
            <br>
            <input type="submit" value="next page">
            <input type="hidden" name="dvsFlag" disabled="disabled">
        </form>
    </body>
    </html>
    
    
    输入表格A
    添加(“dvs1”和“);
    dvs.添加(“dvs2”、“123”);
    dvs.添加(“dvs3”、“ABC”);
    ...
    
    谢谢