【问题标题】:Set the actual value attribute of an input with jQuery使用 jQuery 设置输入的实际值属性
【发布时间】:2009-10-28 01:21:34
【问题描述】:

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

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

还有……

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

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

【问题讨论】:

    标签: jquery forms input


    【解决方案1】:

    当你在做这样的事情时:

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

    它实际上翻译为:

    var temp = $(this).val());
    $(this).val(temp);
    

    所以本质上,它只是把相同的值放回去。

    您要做的是在文档加载或 AJAX 请求时,将值存储在变量中,然后在表单重置时检索它。

    【讨论】:

      【解决方案2】:

      这听起来很酷,这是另一个。

      您可以通过替换整个元素来修改 DOM,因此:

      $('#my_input').val("new_value_here");
      

      你可以使用:

      $('#my_input').replaceWith(' < input type="text" value="new_value_here" />');
      

      【讨论】:

      • $('#my_input').replaceWith(' &lt; input type="checkbox" value="some_value" checked /&gt;');
      【解决方案3】:

      我已经想出了一个解决方案...

      保存表单时(通过 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();    
      }
      

      这对文本框非常有用,只需稍作调整,您就可以使其适用于任何输入类型。我有很多输入,所以我想尽可能避免手动存储/重置它们。这将是一个很好的插件......也许明天

      【讨论】:

      • 这对我很有用,谢谢!我在文本字段的 .keyup() 上设置了 savedValue。然后,当我对文本字段进行 ajax 处理时,它会提取最新的值,该值仍保存在 savedValue 中,然后我可以使用这个漂亮的小脚本在成功时使用它们以前的值重置字段 - $('#myForm input ').each(function() { $(this).val($(this).attr('savedValue')); });非常感谢!
      【解决方案4】:

      只需使用thing.value="foo"; 检查它在事物是 jQuery 对象以及只是一个常规 DOM 对象时是否有效。使用attr('value', $(this).val()) 不会按照您的意愿工作

      【讨论】:

        【解决方案5】:

        甚至比局部变量更好,您可以使用 jQuery Data 方法将重置值与要重置的元素一起存储。

        保存时:

        $(this).data("ResetValue", $(this).val());
        

        重置时:

        $(this).val($(this).data("ResetValue"));
        

        适当地更改选择器,并可能添加 Ryan 提到的未定义检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-29
          • 1970-01-01
          • 1970-01-01
          • 2015-03-25
          • 2014-01-29
          • 1970-01-01
          相关资源
          最近更新 更多