使用jQuery重置多阶段表单
使用jQuery重置多阶段表单
我有一个标准重置按钮的表单,代码如下:
问题是,这个表单是多阶段的,所以如果用户填写了一个阶段,然后回来,各个字段的“记忆”值在单击清除按钮时不会重置。
我想附加一个jQuery函数,循环遍历所有字段并“手动”清除它们,这样就可以解决问题了。我已经在表单中使用了jQuery,但刚刚开始,不确定如何处理,除了通过ID逐个引用每个字段,这似乎不太高效。
感谢任何帮助。
admin 更改状态以发布 2023年5月24日
更新于2012年3月。
因此,在我最初回答这个问题两年之后,我回来看到它已经变成了一团混乱。我觉得是时候回到这个问题上,让我的答案真正正确,因为它是最受欢迎和被接受的。
记录一下,Titi的答案是错误的,因为它不是原始发帖人所要求的——可以使用本地 reset() 方法重置表单,但这个问题正试图清除表单上的记忆值,在这种情况下,如果您以这种方式重置它,这些值将保留在表单中。这就是为什么需要一个“手动”重置。我假设大多数人都是通过谷歌搜索进入这个问题,并真正寻找reset()方法,但它不适用于OP所说的特定情况。
我的原始答案是这样的:
// not correct, use answer below $(':input','#myform') .not(':button, :submit, :reset, :hidden') .val('') .removeAttr('checked') .removeAttr('selected');
这可能适用于许多情况,包括OP的情况,但是根据评论和其他答案指出,它将从任何value属性中删除单选按钮/复选框元素。
一个更正确的答案(但不是完美的)是:
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
仅使用:text、:radio等选择器被jQuery视为不良做法,因为它们最终会评估为*:text,这使它的执行时间要长得多。我更喜欢白名单方法,希望我在原来的答案中使用它。无论如何,通过指定选择器的 input
部分,加上表单元素的缓存,这应该使它成为这里表现最佳的答案。
如果人们的选择元素的默认值不是具有空白值的选项,则此答案仍可能存在某些缺陷,但它肯定是最通用的,并且需要基于特定情况进行处理。