【问题标题】:jQuery works in Chrome but not SafarijQuery 适用于 Chrome,但不适用于 Safari
【发布时间】:2020-08-11 00:50:10
【问题描述】:

我建立了一个网站,它使用 jQuery 根据狗的出生日期计算狗的当前年龄。 jQuery 可以在 google chrome 中运行,但不能在 safari 中运行,我一直无法弄清楚原因。

function puppyAge(){
  let d = new Date()
  let dob = $(`input[name=puppy-age]`).val()
  dob = new Date(dob)
  let age = Math.floor((d-dob)/ (7 * 24 * 60 * 60 * 1000))
  if (age == 1) {
    $(`input[name=puppy-age]`).after(`<p>${age} week</p>`)
  }
  else {
    $(`input[name=puppy-age]`).after(`<p>${age} weeks</p>`)
  }
}

$(document).ready(function(){
  galleryNavigarion(); // scroll page down to each puppy
  parentAge();         // calculate how old (in years) from DOB
  puppyAge();          // calculate how old (in Months) from DOB
})

在 safari 上输出给我“NaN 周”,但在 chrome 上它给了我正确的数字。

【问题讨论】:

  • 很可能是由于dob 字符串中的日期格式。你在里面输入的值是多少?
  • 不清楚您使用哪个字符串输入日期。但是尝试在使用前解析您的日期字符串:const inputValue = $('input[name=puppy-age]').val() 然后const dob = Date.parse(inputValue)

标签: jquery safari


【解决方案1】:

这里有几个问题。

如果您包含 HTML 会有所帮助,因为它不是 100% 清楚 name="puppy-age" 输入是数字还是日期,但我猜它是一个数字。在 Stackoverflow 上提问时,另一个好主意是让您的代码尽可能地对其他人具有可读性。这包括摆脱代码中未包含的函数调用,并且与问题没有任何关系:) parentAgegalleryNavigarion p>

当您使用$().val() 时,您将获得字符串形式的值。您应该将其包装在 JavaScript 函数 parseInt() 中以获取整数形式的值。

其次,你写dob = new Date(dob)dob fx 为 10 将导致日期为 Thu Jan 01 1970 01:00:00 GMT+0100。所以如果你想用狗的年龄减去今天的日期,你可以这样做;

var d = new Date();
dob = new Date(d.getFullYear() - dob, 1);

第二个参数1(month) 很重要,因为 JavaScript 不知道您传递的第一个参数是年,而不是毫秒。

第三,你可能想看看Math.floor,因为它在我的测试中得到了很多0

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2017-11-25
    相关资源
    最近更新 更多