我使用下面的代码设置输入对象的默认值。这适用于文本输入,但select
下拉列表,单选按钮和复选框不会重置为默认值。
我该如何解决这个问题?
function ResetForm(form) {
$(":input", form).not(":button, :submit, :reset, :hidden").each(function () {
this.value = this.defaultValue;
});
}
P.S。我使用此方法重置div
节点中的输入;我将div
的id传递给了这个函数。
答案 0 :(得分:2)
你有几个选择。 你说你没有表格,但为什么不这样做呢?虽然W3C规范不要求输入位于 然后: 或者,如果您的 如果你真的坚持,你可以破解它,使用 (请注意其他贡献者:我最初只关注将元素重置为defaultValue
,但您误解了这些元素的“值”。选择/检查不是“which”或“是否”,而是选择/检查元素的表单内容的一部分的基础值...而你想要前者。< / p>
defaultValue
根本不存在select
,option
实际上没有值,而是一个或多个选定的<form />
个孩子。
选项1:以表格
包装输入
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属性是没有意义的。但是,您可以通过将某些数据与相应的元素相关联来保持所需的默认值。
然而,我仍然认为实现你想要的正确方法就是使用普通形式。