2013-11-19 2 views
2

При разработке некоторый код JavaScript для браузера я столкнулся странные ошибки в Chrome:Javascript ошибка в Chrome и Opera

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. Для меня это явно ошибка, но, может быть, я чего-то не хватает. Это действительно ошибка или что мне не хватает?

+1

Так что единственное различие заключается в том, что вы сохраняете ссылку в этой переменной «a» объекту «style»? – Pointy

+0

Я предполагаю, что браузеры Webkit предназначены не для того, чтобы вы устанавливали любое свойство объекта стиля. Не знаю, почему второй позволяет вам. –

+0

Если я установил случайное свойство объекта «стиль» с консоли Chrome, оно, похоже, работает нормально. – Pointy

ответ

0

кажется WebKit Буг

См Fiddle 1 (работ) по сравнению с Fiddle 2 (не)

Некоторые свойства, кажется, чтобы блокировать пользовательские свойства стиля в 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);  

Для чего это стоит, я увидел ошибку на Chrome 31. Не уверен, что могут быть и другие варианты пострадавшие.

Представлен отчет here

+0

Обе скрипки, похоже, не работают. Вначале после повторного запуска он действует точно так же, как второй. Проверьте эту скрипку http://jsfiddle.net/Lyb3u/ Будет работать нормально, когда вы загружаете страницу, но перезапустите ее и проверьте поведение. Предупреждение onload работает нормально, но onclick этого не делает. –

+0

Я снова проверил твои скрипты, и они оба действуют точно так же, как мои. Они отлично работают при загрузке страницы (предупреждение «мое свойство» при нажатии), но после повторного запуска они начинают действовать, как в описанной ошибке (предупреждение «undefined»). Хотя вы можете воспроизвести эту ошибку в JSfiddle, решение с назначением стиля переменной не работает. Для этого вам нужно запустить сценарий с html-страницы. –

+0

не стесняйтесь добавить больше связанного отчета об ошибке. Не намного больше я могу сделать. :) –

0

element.style является экземпляром CSSStyleDeclaration, что означает, что объект хозяина, а не родные объекты JavaScript.

Спецификация ECMAScript заявляет, что объекты хоста не подчиняются тем же правилам, что и нативные объекты, поэтому я не ожидал, что это будет определено как «ошибка» (хотя я никогда не мог ее реплицировать).

Смежные вопросы