Ошибка с 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, время: 23:17. |