【问题标题】:Why does serializeArray() return little carriage arrows when val() does not?当 val() 不返回时,为什么 serializeArray() 返回小车箭头?
【发布时间】:2014-10-22 18:48:04
【问题描述】:

我在序列化表单时遇到问题,我在使用 jQuery 的 serializeArray() 方法序列化 textarea 时遇到了这些小车箭头

但是,当我使用val() 方法时,结果是这样的:

谁能告诉我他们为什么不同?以及如何摆脱小马车箭头并使其像val() 结果一样,因为小箭头给我带来了问题? (顺便说一句,小箭头的正确术语是什么?)

【问题讨论】:

  • 如果可以的话,可以发html吗?是否需要删除 newline 字符?见stackoverflow.com/questions/4321041/…谢谢
  • 这是console.log 输出吗?第一个记录带有属性的对象,第二个记录纯字符串?这可能会使一切变得不同。尝试点击属性展开

标签: javascript jquery carriage-return


【解决方案1】:

这是因为serializeArray 将回车替换为“\r\n”,而.val 在添加它们的浏览器(IE 和 Opera)中将其删除。

https://github.com/jquery/jquery/blob/master/src/serialize.js

这导致了一个有点奇怪的结果:

$([some-selector]).val() != $([some-form]).serializeArray()[0].value

请参阅此 jsfiddle 示例:

https://jsfiddle.net/434sj450/

这是一个旧的 jquery 错误/对此行为的解释:

http://bugs.jquery.com/ticket/6876

【讨论】:

    【解决方案2】:

    您的结果没有差异。

    在检查这样的对象时,您的检查员只会将换行符显示为马车箭头。尝试双击该值,您会正确地看到它展开以显示分布在 3 行中的完整字符串。

    .val() 返回文本区域的字符串值。

    .serializeArray() 在表单中返回一个元素数组。

    这两行会在控制台输出同样的东西:

    console.log($(this).val());
    console.log($('form').serializeArray()[0].value);
    

    【讨论】:

    • 我认为这是不正确的。 .serializeArray() 不会返回与 .val 相同的值。简短的回答是.serializeArray() 添加正确的回车符。详情见我的回答。
    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2021-07-16
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多