设置输入对象的默认值

时间:2011-08-11 09:36:44

标签: jquery

我使用下面的代码设置输入对象的默认值。这适用于文本输入,但select下拉列表,单选按钮和复选框不会重置为默认值。

我该如何解决这个问题?

function ResetForm(form) {

    $(":input", form).not(":button, :submit, :reset, :hidden").each(function () {
        this.value = this.defaultValue;
    });

}

P.S。我使用此方法重置div节点中的输入;我将div的id传递给了这个函数。

2 个答案:

答案 0 :(得分:2)

单选按钮和复选框存在

defaultValue,但您误解了这些元素的“值”。选择/检查不是“which”或“是否”,而是选择/检查元素的表单内容的一部分的基础值...而你想要前者。< / p>

defaultValue根本不存在selectoption实际上没有值,而是一个或多个选定的<form />个孩子。

你有几个选择。


选项1:以表格

包装输入

你说你没有表格,但为什么不这样做呢?虽然W3C规范不要求输入位于form.reset() 节点下,但它是有意义的。

然后:

form

或者,如果您的form[0].reset() 是一个jQuery元素集(看起来可能是这样):

$.attr

选项2:黑客攻击

如果你真的坚持,你可以破解它,使用$.prop$(function() { prepareForm($('#myForm')); $('#myButton').click(function() { resetForm($('#myForm')); }); }); function prepareForm($form) { // Cache initial states $('input:checkbox, input:radio', $form).each(function() { $(this).prop('initial', $(this).is(':checked')); }); $('select', $form).each(function() { $(this).prop('initial', this.selectedIndex); }); } function resetForm($form) { // Reset elements on button press $('input:checkbox, input:radio', $form).each(function() { $(this).attr('checked', $(this).prop('initial')); }); $('select', $form).each(function() { this.selectedIndex = $(this).prop('initial'); }); } 混合来缓存初始值。确保您使用的是 jQuery 1.6.1 +

$.attr

Live demo.


请注意其他贡献者:我最初只关注将元素重置为$.attr指定的状态,但我想即使是1.6.1 +'{{ 1}}并不像我想的那样。)

答案 1 :(得分:0)

因为单选按钮的值不是由“value”属性决定,而是由“checked”属性确定。

以下代码似乎按预期工作(http://jsfiddle.net/eVnMA/2/):

function reset(form)
{
    $(":input", form).not(":button, :submit, :reset, :hidden").each(function () {
        var type = $(this).attr("type");
        if(type != "radio" && type != "checkbox") this.value = this.defaultValue;
        else this.checked = $(this).data("default_value");
    });

}
$("#cb").data("default_value", null);
$("#btn").click(function(){reset("#aaa");});

请注意,在复选框/单选按钮的情况下使用defaultValue属性是没有意义的。但是,您可以通过将某些数据与相应的元素相关联来保持所需的默认值。

然而,我仍然认为实现你想要的正确方法就是使用普通形式。