【发布时间】:2013-11-19 22:22:30
【问题描述】:
在为浏览器开发一些 JavaScript 代码时,我在 Chrome 中遇到了奇怪的错误:
var element = document.getElementById('someId');
element.style.customProp = 'my property';
element.addEventListener('click', function() {
console.log(element.style.customProp);
}, false);
点击控制台打印“未定义”,但是当我将代码更改为:
var element = document.getElementById('someId');
element.style.customProp = 'my property';
var a = element.style;
element.addEventListener('click', function() {
console.log(element.style.customProp);
}, false);
控制台打印“我的财产”。
代码的第一个版本在 Firefox 和 Internet Explorer 中按预期工作。它不在 Chrome 和 Opera 中。对我来说,这显然是一个错误,但也许我错过了一些东西。这真的是一个错误还是我错过了什么?
【问题讨论】:
-
所以唯一的区别是您将“a”变量中的引用保存到“style”对象?
-
我的猜测是 Webkit 浏览器的设计目的不是让您在样式对象上设置任何属性。不知道为什么第二个允许你这样做。
-
如果我从 Chrome 控制台为“样式”对象设置随机属性,它似乎工作得很好。
-
在控制台中运行
document.body.style.thisdoesntexist='asdfdf';console.log(document.body.style.thisdoesntexist)打印未定义。 -
似乎是一个错误。当我尝试复制时,它工作正常,除非我设置了边界半径。