使用jQuery设置输入的实际值属性

时间:2009-10-28 01:21:34

标签: jquery forms input

我正在尝试重置输入的实际值属性,以便在重置时可以将其重置为该值,而不一定是加载表单时的原始值。问题是这些变化似乎没有生效。我试过了两个:

$(this).attr('value', $(this).val());

以及....

$(this).val($(this).val());

这些都不会实际更改输入的value=""属性,这是重置表单时使用的属性。问题是,如果有人保存表单(通过AJAX),然后再次编辑它并按下重置(w / out保存此时间),它将返回到加载页面的原始值,而不是上次保存的值,这就是我想要的。我知道有很多方法(存储在局部变量或其他东西),但jQuery解决方案会好得多。任何想法??

5 个答案:

答案 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所述。