【问题标题】:Empty value after form submit表单提交后的空值
【发布时间】:2018-06-14 14:49:09
【问题描述】:

关于使用 JQuery 动态设置输入值,我遇到了一个非常奇怪的问题。

目标输入的初始状态如下:

<input type="text" id="birthdate" name="birthdate" value="" data-alt-value="0000-00-00" autocomplete="off" data-local-value="0000-00-00">

注意:输入字段是通过 Joomla 框架生成的(可能有关系,我不知道)。

如果我以常规方式设置值:

$('[name="birthdate"]').val("1986-01-21");

我得到这个结果:

<input type="text" id="birthdate" name="birthdate" value="" data-alt-value="1986-01-21" autocomplete="off" data-local-value="1986-01-21">

未设置 value 属性。所以我尝试了这种方式:

$('[name="birthdate"]').attr('value', "1986-01-21");

给出了预期的结果:

<input type="text" id="birthdate" name="birthdate" value="1986-01-21" data-alt-value="1986-01-21" autocomplete="off" data-local-value="1986-01-21">

但无论出于何种原因,表单提交后该值为空。 更奇怪的是,如果我将焦点放在出生日期字段(通过单击它)然后提交表单,则值会正确传递。

我要指出,这个问题只发生在处理日期或日期时间值的输入字段中。

有人可以帮助我吗?

【问题讨论】:

  • $('[name="birthdate"]').val("1986-01-21"); 不会更改 value 属性,它会更改 input 值(输入字段中的文本)。 $('[name="birthdate"]').attr('value', "1986-01-21"); 则相反(设置 value 属性,但不设置 input 值)。
  • @APAD1 嗯,input 的情况是一样的吗?
  • @APAD1 我明白你在说什么,但input 标签的value 属性应该是input value。也许给我一个链接?

标签: jquery forms


【解决方案1】:

提交表单时,发送的参数来自输入字段的value 属性。 value属性作为value属性的初始值,但是改变属性并不会改变属性(属性是单独保存的,以便表单的reset()方法可以恢复)。

要更改提交的内容,您只需要更改属性,而不是属性。当您在控制台中查看 DOM 时,您不会看到这种变化。

有关属性和属性之间关系的更多信息,请参阅Why should HTML DOM properties be reflected into HTML DOM attributes as well?。一些属性和属性的工作方式与其他的略有不同。

【讨论】:

  • 感谢您提供此信息。但是,我尝试使用 JQuery prop() 方法,但它仍然不起作用。此外,为什么无论使用哪种方法都正确提交了其他输入字段?我该如何解决这个问题?
  • .prop() 有时会设置属性而不是属性,因为程序员经常混淆它们。见*.com/questions/5874652/prop-vs-attr。在这种情况下可能会这样做,因为您应该使用.val() 来设置属性。
  • 我无法解释为什么这对于不同的输入字段会有不同的工作方式,除非 Joomla 以某种方式干扰。我对 Joomla 一无所知。