Вы пытаетесь получить доступ к свойству или методу для элемента, который не найден.
Изменение:
var desactivateBtn = function(btn){
YAHOO.widget.Button.getButton(btn.id)._setDisabled(true);
};
Кому:
var desactivateBtn = function(btn){
var elem = YAHOO.widget.Button.getButton(btn.id);
if(elem) elem._setDisabled(true);
};
Я столкнулся с подобной проблемой при глотании IE, что другие браузеры сочли бы исключением. Проблема возникла из-за использования eval
(это был устаревший код, не написанный мной). Я не смотрел библиотеку YAHOO, но мне интересно, если метод getButton
использует eval
для внутреннего использования?
edit: Если вы хотите отобразить, какие элементы отсутствуют, нет простого способа сделать это в браузерах, поскольку в IE8 нет console.log
. Вы можете записать вывод в элемент отладки div или предупредить сообщение. Я бы, наверное, пошел с элементом debug div.
var DEBUG = true;
window.DEBUG_OUTPUT = null;
if(DEBUG) {
window.DEBUG_OUTPUT = /* create div, append to whatever element */
}
Затем вы можете изменить свою функцию на что-то вроде:
var desactivateBtn = function(btn){
var elem = YAHOO.widget.Button.getButton(btn.id);
if(elem) { elem._setDisabled(true); }
else { window.DEBUG_OUTPUT.innerHTML = window.DEBUG_OUTPUT.innerHTML + ('' + btn.id);
};
Несколько вещей на заметку:
- Мне не нравится добавление к объекту
window
, но для консоли / отладки я думаю, что все в порядке.
- У меня есть
('' + btn.id)
, чтобы привести нестроковые идентификаторы (например, 1
, 2
и т. Д.) К строкам. Я не уверен, что это проблема, но я давно столкнулся с ошибкой в каком-то браузере, что установка innerHTML = 3
приведет к ошибке, поскольку 3 не является строкой. У меня не было времени проверить, является ли это проблемой в любом из основных браузеров.
edit2: еще лучше, оберните btn.id
в <p></p>
теги.