题
我正在尝试重置输入的实际值属性,以便在重置时可以将其重置为该值,而不一定是加载表单时的原始值。问题是这些变化似乎没有生效。我试过了两个:
$(this).attr('value', $(this).val());
以及....
$(this).val($(this).val());
这些都没有实际更改输入的 value =""
属性,这是重置表单时使用的属性。问题是,如果有人保存表单(通过AJAX),然后再次编辑它并按下重置(w / out保存此时间),它将返回到加载页面的原始值,而不是上次保存的值,这就是我想要的。我知道有很多方法(存储在局部变量或其他东西),但jQuery解决方案会好得多。任何想法??
解决方案
当你做这样的事情时:
$(this).val($(this).val());
它真的翻译为:
var temp = $(this).val());
$(this).val(temp);
所以从本质上说,它只是将相同的价值重新投入。
您要做的是在文档加载或AJAX请求上,将值存储在变量中,然后在重置表单时检索它。
其他提示
这听起来很酷,这是另一个。
您可以通过替换整个元素来修改DOM,而不是:
$('#my_input').val("new_value_here");
你可以使用:
$('#my_input').replaceWith(' < input type="text" value="new_value_here" />');
我已经为此提出了解决方案......
保存表单时(通过AJAX,在成功回调中):
// Set 'savedValue' attr on elements (for when reset, will reset to last saved values)
$('#myForm input').each(function() {
$(this).attr('savedValue', $(this).val());
});
需要重置表单时:
// Reset form
if($('#myForm input:first').attr('savedValue')!=undefined) {
// Have saved values, reset to last saved values
$('#myForm input').each(function() {
$(this).val($(this).attr('savedValue'));
});
}
else {
// No saved values, reset form
$('#myForm')[0].reset();
}
这适用于文本框,只需稍加调整即可使用任何输入类型。我有很多输入,所以我想避免手动存储/重置它们,如果可能的话。这将是一个很好的插件......也许明天
只需使用 thing.value =&quot; foo&quot;;
当thing是jQuery对象以及只是常规DOM对象时,检查它是否有效。使用 attr('value',$(this).val())
将不会按照你想要的方式工作
甚至比局部变量更好,您可以使用jQuery Data方法存储重置值以及要重置的元素。
保存时:
$(this).data("ResetValue", $(this).val());
重置时:
$(this).val($(this).data("ResetValue"));
适当地更改选择器,并可能添加未定义的检查,如Ryan所述。
不隶属于 StackOverflow