从移动 Safari 日期输入返回的对象类型

type of object returned from Mobile Safari date input

本文关键字:对象 类型 返回 输入 移动 Safari 日期      更新时间:2023-09-26

我试图弄清楚当我使用内置日期选择器时,Mobile Safari 返回什么样的对象。例如:

<input id="d" type="date" />

还有javascript:

alert( $("#d").val() );

在非移动 Safari 平台上,这将返回日期(例如。'"01/30/2013'").在移动野生动物园上,我认为这绝对不会返回任何内容。我发现这篇文章(在iPad上设置日期输入的值)让我走得更远:

alert( $("#d").val('yyyy-MM-dd') );

但是警报[object Object]弹出,我卡住了。当我在val()选择器中指定格式时,它返回的是哪种对象?我尝试通过 $.datepicker(来自 jQueryUI)运行它,但这不起作用,当我尝试new Date($("#d").val('yyyy-MM-dd'))时,返回的警报显示"无效日期"。最终,我想要的只是获取日期字段返回的"Jan 30, 2013"字符串并将其转换为"01/30/2013"(字符串),以便我可以将其作为参数传递。

Mobile Safari 为日期输入返回的值类型与任何其他 Webkit 浏览器完全相同。你遇到的困惑是jQuery。

jQuery的val方法在没有参数的情况下调用时返回日期输入的"value"属性的值,例如

var value = $("input.foo").val()

但是当它被调用/with/参数时,它将设置 value 属性并返回一个 jQuery 对象以允许链接。

var value = $("input.foo").val("2013-05-22").val() //"2013-05-22"

在最后一个示例中,该值设置为"2013-05-22",然后读取。

>.val()有两个函数 - w/o param 它是一个 getter 并返回一个日期,使用 1 个参数它是一个 setter 并返回您调用.val()的 dom-object。因此,如果您实际上调用alert( $("#d").val('yyyy-MM-dd') );警报会返回#d dom-object。

这也是new Date($("#d").val('yyyy-MM-dd'))给你一个错误的原因。相反,它应该读作:new Date($("#d").val('yyyy-MM-dd').val())

new Date("Jan 30, 2013")

应该适用于所有人,但您需要的IOS除外

new Date("2013-01-30")

这将返回一个 Date 对象,然后您可以使用该对象。

该方法.toISOString();可帮助您将普通日期转换为IOS所需的ISO格式。

事实证明这是人为错误。移动版本试图读取错误的输入。(一个桌面输入在<input type="text">字段上带有 jQueryUI 选取器,另一个移动输入带有<input type="date">字段。

我觉得自己像个白痴...事实证明,您所需要的只是<input type="date">即使Mobile Safari会将"Jan 31, 2013"放在字段中,jQuery 1.9 $("#d").val()返回"2013-01-31",没有任何技巧。当然,假设您正在读取正确的输入字段。