Javascript 防止表单重置方法清除IE8中隐藏输入的最简单方法

Javascript 防止表单重置方法清除IE8中隐藏输入的最简单方法,javascript,html,internet-explorer,Javascript,Html,Internet Explorer,表单的Javascript重置方法是,但在IE8和IE7中,它仍然可以。有人知道如何让它正常运转吗 我知道我可以通过循环单个输入来实现,或者在重置表单之前记住值,然后恢复它们,但我想知道是否有人能想出一种更简单的方法。如果jQuery能使您的解决方案更简单,请随意使用它。您可以在中看到一个示例 根据,这可能不是IE bug,重置方法对没有初始值的元素的影响是未定义的。您可以使用JavaScript函数捕获重置按钮按下,将这些值保存为cookie,然后返回true以完成重置过程。重新加载时,您可以

表单的Javascript重置方法是,但在IE8和IE7中,它仍然可以。有人知道如何让它正常运转吗

我知道我可以通过循环单个输入来实现,或者在重置表单之前记住值,然后恢复它们,但我想知道是否有人能想出一种更简单的方法。如果jQuery能使您的解决方案更简单,请随意使用它。您可以在中看到一个示例


根据,这可能不是IE bug,重置方法对没有初始值的元素的影响是未定义的。

您可以使用JavaScript函数捕获重置按钮按下,将这些值保存为cookie,然后返回true以完成重置过程。重新加载时,您可以检查这些cookie并将这些值重新插入。

我正在考虑使用jQuery执行类似的操作:

$(document).delegate("form", "resetForm", function() {
    $(this).find("input[type=hidden]").each(function() {
        $(this).prop("defaultValue", $(this).val());
    });
    this.reset();
});
每当我想重置表单时,我都可以执行以下操作:

$("#whateverForm").trigger("resetForm");

下面的代码片段似乎也适用于IE8

$("#testInput").val('foo');
$("#testForm")[0].reset();
$("#result").html($("#testInput").val());
更新:

为什么不创建一个自定义重置函数呢

$("#resetbutton").on("click", function() {
    var form = $(this).closest('form');
    form.find("input:not(:hidden)").val('');
    form.find("select").prop('selected', false);
    // so on

});

执行此操作的一种简单方法是,在重置时使重置临时从窗体中删除隐藏的元素

function fixReset() {
    var testForm =  document.getElementById("testForm");
    testForm._nativeReset = testForm.reset;
    testForm.reset = function(){
        var hidden = $('input[type=hidden]',this).detach();
        this._nativeReset();
        $(this).append(hidden);
    }
};
$(document).ready(fixReset);

这样,如果愿意,您仍然可以使用本机重置按钮。这种方法可以很容易地扩展到处理所有表单

我不确定使用cookie是否是个好主意。可能存在大小限制,如果输入太多,可能会阻止它们工作。还有,你在说什么?那代码在IE8中对我不起作用。您可以在@mikez302上看到它,这是一种不太可能的行为,请查看我的更新以获得替代解决方案。