Ответы пользователя по тегу JavaScript
  • Kак добавить addeventlistener к кнопке, которая создается с помощью js?

    @sobolay
    А нельзя ли навешивать обработчик на кнопки, когда они создавались (возможно, с промежуточным сохранением в какой-н глобальной переменной). Это позволило бы их потом не разыскивать с помощью document.getElementsByClassName
    let container = document.querySelector(".container"),
      	newButton = document.createElement('button');
    
       newButton.innerText = 'Кликни для запуска обработчика';
       newButton.addEventListener('click', event => {
    	  alert('Вы кликнули на кнопку');
       });
      container.appendChild(newButton);
    Ответ написан
  • Почему может показываться отрицательное значение, если двигать по максимуму слева?

    @sobolay
    Как мне кажется, все дело в том, что объект со звездочками у вас довольно мелкий и определение положения курсора при событии выхода мыши за пределы объекта срабатывает некорректно. Для решения можно предложить добавить ограничения наименьшего и наибольшего положения
    function move(e, obj) {
    	    var summ = 0;
    	    var id = obj.next().attr('id').substr(1);
    	    var progress = e.pageX - obj.offset().left;
    
    	    var width = obj.width(),
    		  leftEdge = obj.offset().left,
    		  rightEdge = obj.offset().left + width;
    
    	    if (e.pageX < leftEdge) {
    		 progress = 0;
    	    } else if (e.pageX >= rightEdge) {
    		 progress = obj.width();
    	    }
    	
    	    var rating = progress * 5 / width;
    
    	    $('#param' + id).text(rating.toFixed(2));
    	    obj.next().width(progress);
    	    $('.stars__count').each(function() {
    	      summ += parseFloat($(this).text());
    	    });
    	  };

    и проверку на событие выхода за пределы объекта через правую его границу: если мышь вышла через правую границу, то присваиваем 5
    $('.stars__data').on('mouseleave', function(e) {
    			var summ = 0;
    			var id = $(this).next().attr('id').substr(1);
    
    			var width = $(this).width(),
    			      reasonableWidth = width * 0.1,
    			      height = $(this).height(),
    			      leftEdge = $(this).offset().left,
    			      topEdge = $(this).offset().top,
    			      bottomEdge = topEdge + height,
    			      exitPointX = e.pageX,
    			      exitPointY = e.pageY;
    
    			if ( ( exitPointY >= topEdge ) && ( exitPointY <= bottomEdge ) && ( exitPointX > (leftEdge + reasonableWidth) ) ) {
    				$('#param' + id).text("5");
    				$(this).next().width(width);
    				$('.stars__count').each(function() {
    					summ += parseFloat($(this).text());
    				});
    			}
    		});
    Ответ написан