Javascript IE 11浏览器不存储表单数据。我需要为访问的页面存储页面脏标志。我的代码仅在chrome中运行良好

Javascript IE 11浏览器不存储表单数据。我需要为访问的页面存储页面脏标志。我的代码仅在chrome中运行良好,javascript,jquery,html,Javascript,Jquery,Html,我需要在我的应用程序中检测页面脏标志 我用过: <form name="ignore_me"> <input type="text" value="0" id='page_is_dirty' name='txt' style="display: none" /> </form> 要在我的HTML中设置标志: <script> var dirty_bit = document.getElementById('page_is_d

我需要在我的应用程序中检测页面脏标志

我用过:

<form name="ignore_me">
    <input type="text" value="0" id='page_is_dirty' name='txt' style="display: none" /> 
</form>

要在我的HTML中设置标志:

<script>
    var dirty_bit = document.getElementById('page_is_dirty');
    if (dirty_bit.value == '1') {
        //Some one went to other site and now came back using back button
        alert('On back button , dirty page.');
        callWicket();
    }
    //first time page load so mark it dirty
    function mark_page_dirty() {
        dirty_bit.value = '1';
        alert('In 3 dirty_bit = ' +dirty_bit.value);
    };
    mark_page_dirty();
    alert('In 4 dirty_bit = ' +dirty_bit.value);
</script>

var dirty_bit=document.getElementById('page_是_dirty');
如果(脏_位值=='1'){
//有人去了另一个站点,现在使用返回按钮返回
警报(“在背面按钮上,脏页”);
callWicket();
}
//第一次加载页面时,请将其标记为“脏”
功能标记\页面\脏(){
脏_位值='1';
警报('In 3 dirty_bit='+dirty_bit.value);
};
标记页面脏();
警报('In 4 dirty_bit='+dirty_bit.value);
当我再次访问同一页面时,如果用户单击应用程序URL以外的任何URL,则单击“后退”按钮,并按下“后退”按钮再次进入应用程序,则该值保持为1

但它在chrome中只保留了值1。在IE 11中,它没有保留旧值1,重新加载表单数据并再次设置为0


我需要在IE中获取存储的表单数据。是否有任何方法可以从表单数据中获取页面\u Is\u脏值

您所做的获取和设置表单值是正确的,但可以简化为:

<form id="test">
    <input id="dirty" type="hidden" value="no" />
</form>

<script>
    function isDirty() {
        var dirty = document.getElementById("dirty").value;
        return (dirty === "yes");
    }

    function setDirty(dirty) {
        document.getElementById("dirty").value = (dirty) ? "yes" : "no";
    }

    console.log("Dirty?", isDirty());
    setDirty(true);
    console.log("Dirty?", isDirty());
</script>

函数isDirty(){
var dirty=document.getElementById(“dirty”).value;
返回(脏==“是”);
}
函数设置脏(脏){
document.getElementById(“dirty”).value=(dirty)?“是”:“否”;
}
log(“Dirty?”,isDirty());
setDirty(真);
log(“Dirty?”,isDirty());

但是为了在页面加载之间保持这种状态,也许考虑使用像LoalSturial<强>而不是之类的形式:

<script>
    function isDirty() {
        var dirty = window.localStorage.getItem("page_dirty");
        return (dirty === "yes");
    }

    function setDirty(dirty) {
        window.localStorage.setItem("page_dirty", (dirty) ? "yes" : "no");
    }

    console.log("Dirty?", isDirty());
    setDirty(true);
    console.log("Dirty?", isDirty());
</script>

函数isDirty(){
var dirty=window.localStorage.getItem(“page_dirty”);
返回(脏==“是”);
}
函数设置脏(脏){
window.localStorage.setItem(“page_dirty”,(dirty)?“yes”:“no”);
}
log(“Dirty?”,isDirty());
setDirty(真);
log(“Dirty?”,isDirty());
这样,您的状态将出现在同一站点的页面加载之间。如果绝对需要,您可以在设置时将它们组合起来更新表单值。

这只是Chrome浏览器的一个“功能”。单击“上一步”时,浏览器不会发出任何http请求,它只是重新呈现上一个请求中的内容。有趣的是,Chrome保留了输入值,而IE没有。我只是注意到Firefox也有自己的方式

我相信在这种情况下,没有任何规范强制浏览器保留输入值

因此,您的技术并不是在所有浏览器中都能始终如一地工作


您应该使用一些其他技术,如cookies、会话;或本地存储用于新浏览器。

在Chrome中,如果您通过Ctrl+F5(硬刷新)刷新页面,Chrome是否保留输入值“1”?需要注意的一点是,本地存储正在阻塞,并且不提供异步设置或获取方法,因此请谨慎使用。然而,在这种情况下,从本地存储迁移将是一个过早的优化。感谢它的工作,我又添加了一个检查,它用于后退按钮检测。如果(page_dirty==“yes”&&dirty==“no”&&(currentURL==oldURL)){return true;}否则返回false;var currentURL=document.location.href;var oldURL=window.localStorage.getItem(“oldPageURL”);如果您不关心IE9及更早版本,您可以尝试使用来检测“返回”的用户。在回调中,您可能会在导航之前将脏标志写入localstorage。