我有一个带有标准复位按钮的表格,因此编码:
<input type="reset" class="button standard" value="Clear" />
麻烦的是,表示形式是多阶段排序,所以如果用户填写一个舞台&amp;然后返回,单击“清除”按钮时,各个字段的“记住”值将不会重置。
我认为附加一个jQuery函数来遍历所有字段并“手动”清除它们就可以了。我已经在表单中使用了jQuery,但我只是刚刚起步到速度和所以我不知道如何解决这个问题,除了通过ID单独引用每个字段,这看起来效率不高。
TIA提供任何帮助。
答案 0 :(得分:494)
所以,在我最初回答这个问题两年后,我回过头来看它已经变成了一个大混乱。我觉得现在是时候回到它,让我的答案真正正确,因为它是最受欢迎的+接受。
为了记录,Titi的答案是错误的,因为它不是原始海报所要求的 - 使用原生重置()方法重置表单是正确的,但这个问题是试图清除表格如果您以这种方式重置它,将记住保留在表单中的记忆值。这就是需要“手动”复位的原因。我假设大多数人都是通过谷歌搜索结束这个问题而且真的在寻找reset()方法,但它不适用于OP所讨论的特定情况。
我的原始答案是:
// not correct, use answer below
$(':input','#myform')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
这可能适用于很多情况,包括OP,但正如评论和其他答案中所指出的,将清除任何值属性中的radio / checkbox元素。
更强正确答案(但不完美)是:
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
部分,加上表单元素的缓存,这应该使它成为表现最佳的答案。
如果人们对select元素的默认值不是具有空白值的选项,那么这个答案可能仍有一些缺陷,但它肯定是通用的,因为它将需要在一个案例中处理 - 基础。
答案 1 :(得分:390)
来自http://groups.google.com/group/jquery-dev/msg/2e0b7435a864beea:
$('#myform')[0].reset();
如果你有这样的输入,设置myinput.val('')
可能无法模拟“重置”100%:
<input name="percent" value="50"/>
例如,对默认值为50的输入调用myinput.val('')
会将其设置为空字符串,而调用myform.reset()
会将其重置为初始值50。
答案 2 :(得分:48)
Paolo接受的答案存在很大问题。考虑:
$(':input','#myform')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
.val('')
行也会清除分配给复选框和单选按钮的任何value
。所以,如果(像我一样)你做这样的事情:
<input type="checkbox" name="list[]" value="one" />
<input type="checkbox" name="list[]" value="two" checked="checked" />
<input type="checkbox" name="list[]" value="three" />
使用接受的答案会将您的输入转换为:
<input type="checkbox" name="list[]" value="" />
<input type="checkbox" name="list[]" value="" />
<input type="checkbox" name="list[]" value="" />
哎呀 - 我正在使用那个值!
这是一个修改后的版本,它会保留您的复选框和广播值:
// Use a whitelist of fields to minimize unintended side effects.
$('INPUT:text, INPUT:password, INPUT:file, SELECT, TEXTAREA', '#myFormId').val('');
// De-select any checkboxes, radios and drop-down menus
$('INPUT:checkbox, INPUT:radio', '#myFormId').removeAttr('checked').removeAttr('selected');
答案 3 :(得分:15)
jQuery插件
我创建了一个jQuery插件,因此我可以在任何需要的地方轻松使用它:
jQuery.fn.clear = function()
{
var $form = $(this);
$form.find('input:text, input:password, input:file, textarea').val('');
$form.find('select option:selected').removeAttr('selected');
$form.find('input:checkbox, input:radio').removeAttr('checked');
return this;
};
所以现在我可以通过调用它来使用它:
$('#my-form').clear();
答案 4 :(得分:14)
清除表单有点棘手,并不像看起来那么简单。
建议您使用jQuery form plugin并使用其clearForm or resetForm功能。 它负责大多数角落案件。
答案 5 :(得分:14)
的document.getElementById( 'FRM')。复位()
答案 6 :(得分:13)
我通常会这样做:
$('#formDiv form').get(0).reset()
或
$('#formId').get(0).reset()
答案 7 :(得分:5)
考虑使用validation plugin - 太棒了!重置表单很简单:
var validator = $("#myform").validate();
validator.resetForm();
答案 8 :(得分:4)
但是,有一些javascript属性可以提供帮助:
这些存储了加载页面时字段的值。
编写jQuery插件现在变得微不足道了: (对于不耐烦的......这是一个演示http://jsfiddle.net/kritzikratzi/N8fEF/1/)(function( $ ){
$.fn.resetValue = function() {
return this.each(function() {
var $this = $(this);
var node = this.nodeName.toLowerCase();
var type = $this.attr( "type" );
if( node == "input" && ( type == "text" || type == "password" ) ){
this.value = this.defaultValue;
}
else if( node == "input" && ( type == "radio" || type == "checkbox" ) ){
this.checked = this.defaultChecked;
}
else if( node == "input" && ( type == "button" || type == "submit" || type="reset" ) ){
// we really don't care
}
else if( node == "select" ){
this.selectedIndex = $this.find( "option" ).filter( function(){
return this.defaultSelected == true;
} ).index();
}
else if( node == "textarea" ){
this.value = this.defaultValue;
}
// not good... unknown element, guess around
else if( this.hasOwnProperty( "defaultValue" ) ){
this.value = this.defaultValue;
}
else{
// panic! must be some html5 crazyness
}
});
}
} )(jQuery);
// reset a bunch of fields
$( "#input1, #input2, #select1" ).resetValue();
// reset a group of radio buttons
$( "input[name=myRadioGroup]" ).resetValue();
// reset all fields in a certain container
$( "#someContainer :input" ).resetValue();
// reset all fields
$( ":input" ).resetValue();
// note that resetting all fields is better with the javascript-builtin command:
$( "#myForm" ).get(0).reset();
$( "#container" ).resetValue()
将不起作用。始终使用$( "#container :input" )
代替。 答案 9 :(得分:4)
如果没有jQuery,你可能会发现这实际上更容易解决。
在常规JavaScript中,这很简单:
document.getElementById('frmitem').reset();
我尽量记住,虽然我们使用jQuery来增强和加速编码,但有时它实际上并不快。在这些情况下,使用其他方法通常会更好。
答案 10 :(得分:4)
我对Francis Lewis' nice solution略有不同。他的解决方案没有做的是将下拉选项设置为空白。 (我认为,当大多数人想要&#34;清除&#34;时,他们可能希望将所有值都清空。)这个值是.find('select').prop("selectedIndex", -1)
。
$.fn.clear = function()
{
$(this).find('input')
.filter(':text, :password, :file').val('')
.end()
.filter(':checkbox, :radio')
.removeAttr('checked')
.end()
.end()
.find('textarea').val('')
.end()
.find('select').prop("selectedIndex", -1)
.find('option:selected').removeAttr('selected')
;
return this;
};
答案 11 :(得分:4)
我觉得这很有效。
$(":input").not(":button, :submit, :reset, :hidden").each( function() {
this.value = this.defaultValue;
});
答案 12 :(得分:4)
这是让你入门的东西
$('form') // match your correct form
.find('input[type!=submit], input[type!=reset]') // don't reset submit or reset
.val(''); // set their value to blank
当然,如果你有复选框/单选按钮,则需要修改它以包含它们并设置.attr({'checked': false});
修改强>
Paolo's answer更简洁。我的回答更加冗长,因为我不知道:input
选择器,也没想过简单地删除checked属性。
答案 13 :(得分:2)
只需使用jQuery Trigger event
,就像这样:
$('form').trigger("reset");
这将重置复选框,单选按钮,文本框等...基本上它会将您的表单转换为默认状态。只需将#ID, Class, element
放在jQuery
选择器内。
答案 14 :(得分:2)
修改$(document).ready()
情况的最多投票答案:
$('button[type="reset"]').click(function(e) {
$form = $(this.form);
$form.find('input:text, input:password, input:file, select, textarea').val('');
$form.find('input:radio, input:checkbox').removeAttr('checked').removeAttr('selected');
e.preventDefault();
});
答案 15 :(得分:2)
我通常会在表单中添加一个隐藏的重置按钮。 只需要: $( '#复位')点击()。
答案 16 :(得分:1)
我只是PHP中的中间人,有点懒于深入研究像JQuery这样的新语言,但这不是以下简单而优雅的解决方案吗?
<input name="Submit1" type="submit" value="Get free quote" />
<input name="submitreset" type="submit" value="Reset" />
看不出有两个提交按钮的原因,只是出于不同的目的。 然后简单地说:
if ($_POST['submitreset']=="Reset") {
$_source = "--Choose language from--";
$_target = "--Choose language to--"; }
您只需将值重新定义为默认值即可。
答案 17 :(得分:1)
我正在使用Paolo Bergantino解决方案,这个解决方案非常棒,但很少进行调整......特别是使用表单名称而不是id。
例如:
function jqResetForm(form){
$(':input','form[name='+form+']')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
}
现在,当我想使用它时,可以做
<span class="button" onclick="jqResetForm('formName')">Reset</span>
如您所见,这可以使用任何形式,因为我使用css样式创建按钮,单击时页面不会刷新。再次感谢Paolo的意见。唯一的问题是如果我在表单中有默认值。
答案 18 :(得分:1)
我使用下面的解决方案,它适用于我(将传统的javascript与jQuery混合)
$("#myformId").submit(function() {
comand="window.document."+$(this).attr('name')+".reset()";
setTimeout("eval(comando)",4000);
})
答案 19 :(得分:1)
这对我有用,pyrotex回答没有'重置选择字段,拿走他的,这里'我的编辑:
// Use a whitelist of fields to minimize unintended side effects.
$(':text, :password, :file', '#myFormId').val('');
// De-select any checkboxes, radios and drop-down menus
$(':input,select option', '#myFormId').removeAttr('checked').removeAttr('selected');
//this is for selecting the first entry of the select
$('select option:first', '#myFormId').attr('selected',true);
答案 20 :(得分:0)
<script type="text/javascript">
$("#edit_name").val('default value');
$("#edit_url").val('default value');
$("#edit_priority").val('default value');
$("#edit_description").val('default value');
$("#edit_icon_url option:selected").removeAttr("selected");
</script>
答案 21 :(得分:0)
所有这些答案都很好,但绝对最简单的方法是使用假复位,即使用链接和重置按钮。
只需添加一些CSS即可隐藏真正的重置按钮。
input[type=reset] { visibility:hidden; height:0; padding:0;}
然后在您的链接上添加如下
<a href="javascript:{}" onclick="reset.click()">Reset form</a>
<input type="reset" name="reset" id="reset" /><!--This input button is hidden-->
希望这有帮助! 甲
答案 22 :(得分:0)
这里有复选框的刷新并选择:
$('#frm').find('input:text, input:password, input:file, textarea').val('');
$('#frm').find('input:radio, input:checkbox').attr("checked",false).checkboxradio("refresh");
$('#frm').find('select').val('').selectmenu('refresh');
答案 23 :(得分:0)
我遇到了同样的问题,保罗的帖子帮助了我,但我需要调整一件事。我的带有advanced advancedindexsearch的表单只包含输入字段并从会话中获取值。出于某种原因,以下内容对我不起作用:
$("#advancedindexsearch").find("input:text").val("");
如果我在此之后发出警告,我会看到正确删除的值,但之后它们会再次被替换。我仍然不知道如何或为什么,但以下一行确实为我做了诀窍:
$("#advancedindexsearch").find("input:text").attr("value","");
答案 24 :(得分:0)
Paolo的答案没有考虑日期选择器,请将其添加到:
$form.find('input[type="date"]').val('');
答案 25 :(得分:0)
我对Paolo Bergantino的原始答案做了一些改进
function resetFormInputs(context) {
jQuery(':input', context)
.removeAttr('checked')
.removeAttr('selected')
.not(':button, :submit, :reset, :hidden')
.each(function(){
jQuery(this).val(jQuery(this).prop('defautValue'));
});
}
通过这种方式,我可以将任何上下文元素传递给函数。我可以重置整个表单或仅重置某组字段,例如:
resetFormInputs('#form-id'); // entire form
resetFormInputs('.personal-info'); // only the personal info field set
另外,保留输入的默认值。
答案 26 :(得分:0)
这是我的解决方案,它也适用于新的html5输入类型:
/**
* removes all value attributes from input/textarea/select-fields the element with the given css-selector
* @param {string} ele css-selector of the element | #form_5
*/
function clear_form_elements(ele) {
$(ele).find(':input').each(function() {
switch (this.type) {
case 'checkbox':
case 'radio':
this.checked = false;
default:
$(this).val('');
break;
}
});
}
答案 27 :(得分:0)
我在一个相当大的表单(50多个字段)上使用的方法是使用AJAX重新加载表单,基本上是回调服务器并返回带有默认值的字段。这比使用JS获取每个字段然后将其设置为默认值要容易得多。它还允许我将默认值保存在一个位置 - 服务器的代码。在这个网站上,还有一些不同的默认值,具体取决于帐户的设置,因此我不必担心将这些发送给JS。我必须解决的唯一一个小问题是在AJAX调用之后需要初始化的一些建议字段,但不是什么大问题。
答案 28 :(得分:0)
补充已接受的答案,如果您使用SELECT2插件,则需要调出select2脚本来进行更改,这是所有select2字段:
function resetForm(formId){
$('#'+formId).find('input:text, input:password, input:file, select, select2, textarea').val('');
$('#'+formId).find('input:radio, input:checkbox').removeAttr('checked').removeAttr('selected');
$('.select2').select2();
}
答案 29 :(得分:-1)
$(this).closest('form').find('input,textarea,select').not(':image').prop('disabled', true);