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