我知道在使用 JavaScript 或 jQuery 时。我可以在对象上添加一个事件侦听器,以便在按下某个键时调用函数。
但是,如果函数是从 HTML 启动的,如下例所示:
function callMyFunction (importantothervalue) {
//How can I get the keycode?
}Run Code Online (Sandbox Code Playgroud)
<textarea onkeyup="callMyFunction(1);"></textarea>
<textarea onkeyup="callMyFunction(2);"></textarea>
<textarea onkeyup="callMyFunction(3);"></textarea>Run Code Online (Sandbox Code Playgroud)
有没有办法从这个上下文中检索关键代码?或者如果我想获得关键代码,我是否总是需要制作一个事件处理程序?
有什么方法可以让我在生成的函数调用中包含重要的其他值,而无需对id或class属性中的信息进行编码并从那里提取它?
我正在开发一个网络工具,目前遇到一个问题,在某些选项卡上,我得到的是 UTC 而不是正确的时区偏移量。
即如果我放入控制台:
(new Date()).getTimezoneOffset()
我在某些选项卡中得到 0,在其他选项卡中得到 420 的值。甚至加载了完全相同网站的选项卡。
当我使用 getMonth、getDate、getHours 等时......时间也都是 UTC 格式。
我刚开始使用 getTimezoneOffset,那么这种行为是我应该期待的吗?根据我正在阅读的内容,我认为这应该是我电脑上的当地时间,在此过程中根本没有改变。
Chrome 版本 71.0.3578.80(官方版本)(64 位)
是我做错了什么还是这确实是我在 Chrome 中发现的错误?我似乎找不到任何此类错误的记录。最接近的是 Android 专用的。https://bugs.chromium.org/p/chromium/issues/detail?id=520783
然而,在 Chrome 用户众多的情况下,我似乎不太可能是第一个发现此类错误的人。我想确定这绝对是一个错误。
以下是一些附加信息:
navigator.userAgent = Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/71.0.3578.80 Safari/537.36
工作选项卡:
Intl.DateTimeFormat().resolvedOptions().timeZone = undefined
new Date().toString() = "Mon Dec 24 2018 16:09:55 GMT-0700 (GMT-07:00)"
(new Date()).getTimezoneOffset() = 420
(new Date()).getHours() = 16
Run Code Online (Sandbox Code Playgroud)
失败的选项卡:
Intl.DateTimeFormat().resolvedOptions().timeZone = "Etc/Unknown"
new Date().toString() = "Mon Dec 24 2018 23:09:44 GMT+0000 (GMT)"
(new Date()).getTimezoneOffset() = 0
(new Date()).getHours() …Run Code Online (Sandbox Code Playgroud) 对于那些不知道的人来说,扩展语法是将不确定数量的参数传递到函数中的一种便捷方法,类似于此示例:
function debug (mode, string, ...params) {
if (debug_enabled && window.console) {
console.log(mode+": "+string+"(",...params,");");
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,Internet Explorer 和其他旧版本的浏览器不支持此功能。这里有关于扩展语法和浏览器支持的更多信息。
我没有将扩展语法用于任何关键的事情,但是将其出现在网站上会导致 JavaScript 在那些较旧的浏览器上完全失败。
一种选择是我可以为旧版浏览器提供单独的脚本版本,然后根据用户代理传递此脚本。但是,我想避免这种情况,因为维护这两个文件和作为一般浏览器都很痛苦如果使用其他功能,这可能会变得更加复杂。此外,还存在对用户浏览器进行错误分类的风险。
另一种选择是找到一种方法来完全避免在所有功能中使用扩展语法。然而,这可能会增加开发时间并创建更难以理解和使用的代码。这似乎不是一个避免使用新功能的好策略,因为只有极少数的观众无法使用它们。
我希望有人可能拥有或知道一种聪明的方法来检测扩展语法的支持,并在用户浏览器不支持扩展语法的情况下排除部分脚本。通过这种方式,我可以为使用旧版浏览器的用户提供仍然可用的体验,并且只错过一些功能。我一直在网上搜索,但找不到任何执行此操作的代码。我认为这可能是不可能的,因为它是核心语法修改,但是我也找不到任何东西来完全确认这种情况。
javascript compatibility function cross-browser spread-syntax