当我在表单元素上执行重置方法时,为什么我的隐藏字段没有被重置?

27 浏览
0 Comments

当我在表单元素上执行重置方法时,为什么我的隐藏字段没有被重置?

我想要重置ID为user_post的表单。该表单还包含隐藏字段。

我使用以下代码来重置输入表单字段

$('#user_post').each(function(){
this.reset();
});

我的表单如下所示

0
0 Comments

这个问题出现的原因是因为根据标准,当执行表单元素的reset方法时,隐藏字段不会被重置。

解决方法是使用CSS的"display:none"属性来隐藏字段。通过将该属性应用于字段,可以实现隐藏字段的效果,并能够在执行reset方法时将其重置。

以下是解决该问题的代码示例:

HTML代码:

JavaScript代码:

function resetHiddenField() {
  document.getElementById("myForm").hiddenField.value = "hiddenValue";
}

上述代码中,我们给隐藏字段添加了一个id属性,通过JavaScript代码来重置该字段的值。在点击Reset按钮时,会调用resetHiddenField函数,该函数会将隐藏字段的值重置为"hiddenValue"。

使用上述方法,可以解决隐藏字段在执行reset方法时不被重置的问题。

0
0 Comments

问题原因:form元素的reset方法不能重置隐藏字段的值。

解决方法:通过JavaScript获取隐藏字段的初始值,并在表单重置事件中将隐藏字段的值恢复到初始状态。

方法一:使用纯JavaScript实现

;(function (undefined) {
    var i, k, form, element,
        formInfo = [];
    for (i = 0; i < document.forms.length; i++) {
        form = document.forms[i];
        formInfo[i] = {};
        for (j = 0; j < form.elements.length; j++) {
            element = form.elements[j];
            if (!element || element.type !== 'hidden')
                continue;
            formInfo[i][j] = element.value;
        }
        form.addEventListener('reset', onFormReset);
    }
    function onFormReset(e) {
        var i, k;
        for (i = 0; i < document.forms.length; i++) {
            if (document.forms[i] === this) {
                for (k in formInfo[i]) {
                    this.elements[k].value = formInfo[i][k];
                }
            }   
        }
    }
})();

方法二:使用data-*属性存储隐藏字段的初始值

;(function (undefined) {
    var i, j, form, element;
    var onFormReset = function (e) {
        var i, defaultValue;
        for (i = 0; i < this.elements.length; i++) {
            element = this.elements[i];
            if (element.type !== 'hidden')
                continue;
            this.elements[i].value = element.getAttribute('data-default');
        }
    };
    for (i = 0; i < document.forms.length; i++) {
        form = document.forms[i];
        for (j = 0; j < form.elements.length; j++) {
            element = form.elements[j];
            if (element.type !== 'hidden')
                continue;
            element.setAttribute('data-default', element.value);
        }
        form.addEventListener('reset', onFormReset);
    }
})();

0
0 Comments

问题原因:由于隐藏字段(hidden fields)在页面上是不可见的,因此在执行表单元素(form element)的reset方法时,隐藏字段并不会被重置。

解决方法:可以将文本字段(text fields)添加样式style='display: none',而不是将它们设置为隐藏输入字段(hidden input fields)。这样做后,重置方法也会对它们起作用。

0