javascript - chrome 71 不会在 onclick 事件中检测到 id,除非它是 this.id
问题描述
我有一个这样的html元素:
<select id="myselect" onclick="jsDoSomething(id)"><option>1</option><option>2</option></select>
直到 Chrome 70,一切正常,在 Chrome 71 中,函数id
内部为 null jsDoSomething
。我必须将其更改this.id
为才能正常工作。这是 Chrome 71 的错误还是...功能?
先感谢您。
编辑:这发生在两个标签上select
,a
而不是button
标签上。
编辑2:jsfiddle:http: //jsfiddle.net/5L0djvqy/10/
解决方案
从这里:
https://html.spec.whatwg.org/multipage/webappapis.html#the-event-handler-processing-algorithm
范围
如果 eventHandler 是一个元素的事件处理程序,那么让 Scope 为 NewObjectEnvironment(document, the global environment)。
否则,eventHandler 是 Window 对象的事件处理程序:设 Scope 为全局环境。
如果表单所有者不为空,则设 Scope 为 NewObjectEnvironment(form owner, Scope)。
如果 element 不为 null,则让 Scope 为 NewObjectEnvironment(element, Scope)。
因此,这种行为似乎是标准的(令人惊讶的是,我从不这样做),所以 Chrome 上似乎有些问题。
但是,我在 Linux 上的 Chrome 71 上测试了一个简单的代码,我得到了“预期”的结果。也许您在某处损坏了 HTML 的结构,并且该元素不是当前的选择框
推荐阅读
- python - 按 Pandas Dataframe 中的列中的条目分组
- c# - 通用 DBContext
- c++ - 如何使用不同于 0 的值初始化二维数组?
- nestjs-jwt - nestjs:从jwt获取当前连接的用户
- javascript - Heroku:可能的匿名代理隐藏节点应用程序上的连接 IP
- python - 如何在 AWS 中正确处理 NotAuthorizedException
- react-native - 传递状态值作为道具反应原生
- node.js - 无法在 nodejs 上使用用 emscripten 编译的 js 库,但如果我启动交互式 nodejs shell,它就可以工作
- java - 登录在 Spring Security 的自定义登录页面中不起作用
- java - Mp3 文件不会在 Linux 上使用 jlayer 转换为 .wav,但会在 macOS 上