Показать сообщение отдельно
  #1 (permalink)  
Старый 02.03.2018, 18:47
Интересующийся
Отправить личное сообщение для TibiTotoro Посмотреть профиль Найти все сообщения от TibiTotoro
 
Регистрация: 02.03.2018
Сообщений: 10

Ошибка с 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 просто регистрирует обработчик, который запускается только если элемент найден и по нему совершено указанное в обработчике действие. Где может быть ошибка?
Ответить с цитированием