Ошибка с addEventListener на страницах, где нет элемента с id
Здравствуйте!
Есть скрипт, который работает с элементами на одной странице сайта, но подключается на всех. На странице, где скрипт работает все нормально, а на остальных страницах сайта выдается ошибка Uncaught TypeError: Cannot read property 'addEventListener' of null at HTMLDocument.<anonymous> (pricecalcen.js?:20) at i (jquery.js?:2) at Object.fireWith [as resolveWith] (jquery.js:2) at Function.ready (jquery.js:2) at HTMLDocument.K (jquery.js:2) Код скрипта jQuery(function($){ var month = { one: { quantity:1, price: 5, rate: 1 }, six: { quantity:6, price: 2, rate: 0.5 }, twelve: { quantity:12, price: 1, rate: 0.2 } }; var number = document.getElementById("NumberOfRooms"); number.addEventListener('click', function(){ this.value = ""; }); number.onkeydown = function(e) { if((e.which >=48 && e.which <=57) || (e.which >=96 && e.which <=105) || e.which==8 || (e.which >=37 && e.which <=40) || e.which==46) { return true; } else { return false; } }; number.addEventListener('keyup', function(){ NumberOfRooms = $('#NumberOfRooms').val(); for (var key in month) { var summSpan = 'summ' + month[key].quantity; var priceSpan = 'price' + month[key].quantity; $('span[id='+priceSpan+']').text(month[key].price.toFixed(2).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')); $('span[id='+summSpan+']').text((month[key].price * month[key].quantity).toFixed(2).replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ')); } }); }) Понятно, что скрипт не видит number, потому что этого элемента просто нет на всех остальных страницах. Но я не могу понять, почему он вообще начинает работать с этим элементом и доводит до ошибки. Мне казалось, что .addEventListener просто регистрирует обработчик, который запускается только если элемент найден и по нему совершено указанное в обработчике действие. Где может быть ошибка? |
"addEventListener" - метод, не волшебное нечто. У null нет этого метода, отсюда и ошибка.
После 19й строки добавьте это: if(!number ) return; |
Спасибо, помогло. А не подскажите, что в такой ситуации лучше, проверка в самом скрипте, есть ли number, как вы написали или проверка адреса страницы if(window.location.pathname == "/text/"){.....}? Если я точно знаю, что скрипт используется только на 1 странице, но не могу подключать его только на ней?
|
Если используется на одной странице, конечно производительней проверить страницу, чем создавать объекты и пытаться получать элементы.
|
Или вынести выше получение элемента и проверку, чтобы не производить лишних телодвижений.
|
Часовой пояс GMT +3, время: 15:27. |