2012 年 3 月更新。
所以,在我最初回答这个问题两年后,我回来发现它几乎变成了一团糟。我觉得是时候回到它并让我的答案真正正确,因为它是最受支持和接受的。
作为记录,蒂蒂的回答是错误的,因为这不是原始发帖人所要求的 - 可以使用本机 reset() 方法重置表单是正确的,但这个问题试图清除已记住的表单如果您以这种方式重置它,这些值将保留在表单中。这就是需要“手动”重置的原因。我假设大多数人最终从谷歌搜索中找到了这个问题,并且真正在寻找 reset() 方法,但它不适用于 OP 正在谈论的特定情况。
我原来的答案是这样的:
// not correct, use answer below
$(':input','#myform')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
这可能适用于很多情况,包括 OP,但正如评论和其他答案中所指出的,将从任何值属性中清除单选/复选框元素。
一个更正确的答案(但不完美)是:
function resetForm($form) {
$form.find('input:text, input:password, input:file, select, textarea').val('');
$form.find('input:radio, input:checkbox')
.removeAttr('checked').removeAttr('selected');
}
// to call, use:
resetForm($('#myform')); // by id, recommended
resetForm($('form[name=myName]')); // by name
jQuery 认为单独使用:text
,:radio
等选择器是不好的做法,因为它们最终会评估*:text
which 使得它花费的时间比预期的要长得多。我确实更喜欢白名单方法,并希望我在原始答案中使用过它。无论如何,通过指定input
选择器的一部分,加上表单元素的缓存,这应该使它成为这里表现最好的答案。
如果人们对选择元素的默认值不是具有空白值的选项,则此答案可能仍然存在一些缺陷,但它肯定是通用的,这需要根据具体情况进行处理.