ddale
@ddale
Front-end developer

Какие ошибки присутствуют в коде JS?

Коллеги, здравствуйте.

Я не силен в JS и понимаю, что мне еще расти и расти. Поэтому прошу указать на ошибки, разъяснить почему нужно писать по-другому, как написать правильно.

Я попытался написать простую функцию, которая бы добавляла на страницу блок, исходя из заданных параметров.

/*
imgPath   - путь до изображения
titleText - название акции
altText   - альтернативный текст
width     - ширина
url       - ссылка
timer     - время таймера по истечении которого показывается баннер
*/

function popUpAction (imgPath,titleText,altText,width,url,timer) {
	// ждем пока страница полностью загрузится
	window.onload = function() {

		// включаем строгий режим
		"use strict";

		// создаем наш блок для показа баннера
		var actionHtml = '<div id="popup-action" style="width: ' + width + 'px"><a href="' + url + '" title="' + titleText + '"><img src="' + imgPath + '" alt="' + altText + '"></a></div>'

		// вставляем элемент на страницу
		var bodyElem = document.body;
		bodyElem.insertAdjacentHTML("beforeEnd", actionHtml);

		// показать баннер
		function showBanner () {
			document.getElementById('popup-action').className = "active";
		}

		// таймер показа
		// если значение таймера выставлено, то запускаем таймер
		if (timer){
			var time = timer; // промежуточная переменная
			setTimeout( function (time) { 
			    showBanner ();
			}, time);
		}
		// если нет, то показываем сразу
		else{
			showBanner ();
		}
	};
}

popUpAction (
    'https://www.qcmyfilm.com/wp-content/uploads/2015/06/special-offer1.png',
    'Текст заголовка у ссылки',
    'Альтернативный текст у изображения',
    '300',
    'http://ya.ru',
    0
);
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 2
effetto
@effetto
.Net разработчик
В сегодняшнем веб-мире Ваша основная ошибка в том, что вы изобретаете велосипед. Использование, например, jQuery очень облегчит задачу, сведя ее к 3-5 строчкам.

Ошибки, которые бросаются в глаза:
  • Размещение html в тексте js, - используйте шаблонизаторы;
  • Отсутствие модульного подхода, например requirejs;
  • Использование строгого режима в теле самой функции, - это не ошибка, но лучше использовать его всегда;
  • Потенциальная уязвимость функции к инъекции кода js в результирующий html;
  • Неправильная обработка событий: каждый вызов функции вешает обработчик событий на загрузку документа, вам действительно нужно такое поведение?


При беглом анализе заметил эти недочеты. Уверен, при детальном можно найти поболе.
Ответ написан
Вы используете линтер для проверки кода? Если нет, очень советую подключить, например, JSHint. Что касается использования библиотек, модулей и шаблонизаторов - тут все зависит от конкретной задачи, которую вам нужно решить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы