Ответы пользователя по тегу JavaScript
  • Как отследить, какую информацию о сайте запрашивает посетитель сайта?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Тут для начала нужно понять концепцию работы клиент-сервер. Клиент, будь то броузер или другой софт, делает серверу запрос. Запрос состоит из заголовков и тела. Дальше сервер анализирует этот запрос и, в зависимости от его содержания, дает ответ. Тут уже зависит от его настроек. Если информация запрещена к выдаче клиенту, то сервер вернет 3хх ошибку, если разрешена - отдаст ее в ответе. Тогда клиент может распарсить ответ и извлечь из него все нужное для себя.
    Например, можно пробежаться рекурсивно по всем внутренним ссылкам на сайте и т.о. составить карту страниц, доступных для посещения.
    Поэтому на Ваш вопрос, применительно к конкретному сайту, ответить не возможно, не зная серверных настроек и настроек, внесенных в .htaccess.
    Ответ написан
    Комментировать
  • Как получить изменяющиеся значения элемента при скролле?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Попробуй
    var box = element.getBoundingClientRect();
    var top = box.top;
    // etc
    Ответ написан
    Комментировать
  • Как перезаписать переменную?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    По ссылке на исходники вижу:
    error 404

    ***
    Но только когда вводишь новые значения инпута он не стирает старые значения которые записались в переменную от предыдущих действии.
    ***
    Это решается примерно так:
    var input= ...;
    var X;
    input.onchange= function() {
    X= this.value;
    }
    Ответ написан
    2 комментария
  • Как вывести несколько вариантов для скачки изображений, в зависимости от его размера?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Этот вопрос больше на ТЗ похож. Быстро и просто на него не ответишь. Точнее, можно ответить, я даже постараюсь, но это только приведет к новым вопросам.
    Итак, есть блок ссылок на скачивание изображения с разным разрешением. Нужно на каждый элемент этого блока навесить обработчик клика, проверяющий наличие такого изображения на сервере. За это отвечает свойство onerror.
    item.omclick= function(e) {
    		var i= new Image();
    		i.src= "image_800x600.png";
    		i.onerror= function() {
    			alert('NO image');
    		};
    		i.onload= function() {
    			alert('YES image');
    		};
    	}
    Ответ написан
  • Как написать регулярное выражение на js для ФИО, где Отчество не обязательно?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    var pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;

    Это регулярка для мыла =)

    var pattern = /^.+\s.+\s?.*$/i;
    Ответ написан
  • Underscore js пройтись по всем элементам многомерного массива?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    var arr = [[1, 2, 3], 1, 2, [1, 2, 3]];
    		var newArr = arr.map(function recur(el) {
    			return !el.forEach? el * 3:  el.map(recur);
    		})
    console.log(newArr);
    Ответ написан
    Комментировать
  • Логика для построение JavaScript скрипта?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Не сложно.
    По клику на нужном цвете вызвать параметр textContent элемента, содержащего цену и присвоить ему вычисленное значение.
    Ответ написан
    4 комментария
  • Как вы делаете вывод уведомлений?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Можно и без связки сделать.
    if(condition) echo "...";

    Можно через JSON-объекты общаться. Они родные для JS и легко парсятся в РНР через json_decode / json_encode.
    Ответ написан
    Комментировать
  • Как применить один обработчик событий к множеству элементов, для индивидуальной обработки, не раздувая / дублируя код?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Это элементарная задача на использование объекта события, передаваемого первым аргументом в любую функцию обработчика. У этого события есть свойство - мишень события. Используя его мы делаем следующее:

    <div id=map>
    	<div class="bface-slide-1"></div>
    	<div class="modal-wrapper modal-1">
    		Контент-1
    	</div>
    
    	<div class="bface-slide-2"></div>
    	<div class="modal-wrapper modal-2">
    		Контент-2
    	</div>
    
    	<div class="bface-slide-3"></div>
    	<div class="modal-wrapper modal-3">
    		Контент-3
    	</div>
    </div>
    
    
    <script>
    	// to hell jQuery!
    document.getElementById('map').addEventListener('click', function (e) {
    	var t= e.target; // Объект - инициатор события
    	t.style.cursor='pointer';
    	if(/modal\-wrapper/i.test(t.className)) alert(t.className);
    });
    </script>


    Пример работы.
    Ответ написан
    Комментировать
  • Когда использовать классы, а когда функции?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Согласен с Ларисой, но немного дополню.
    Классы, собственно, введены для любителей ООП, и действительно - только эмулируют в JS классическое ООП.
    Нужны они для того, чтобы инкапсуллировать части кода, иметь возможности классового наследования и проч. Но нужно не забывать, что в JS используется наследование на прототипах и никакого другого в нем нет.
    Если понять вышесказанное, то от классов в JS лучше отказаться, и использовать встроенные инструменты. Сразу скажу единственный минус, который я не смог чисто обойти - отсутствие множественного наследования.

    Итак, инкапсулляцию лучше всего делать, размещая все функции отдельного блока кода не в классе, а в качестве методов объекта.
    var obj1= {
    prop1: value,
    met1: function(arguments) {
    body
    }
    // etc
    }


    При таком подходе мы имеем в глобальном скопе лишь одну переменную, но можем вполне использовать весь ее потенциал, как:
    obj1.met1();
    И зачем нам нужны классы при таком подходе?
    Если нам нужно унаследовать от другого объекта, самым простым способом будет разместить ссылку на родительский объект в свойстве __proto__ наследника.
    var parent= {...};
    var child= {
    __proto__: parent,
    .....
    }
    Ответ написан
    Комментировать
  • Вопрос по var в JavaScript?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Все очень просто. Любая переменная должна объявляться через var. Запись a=2 в strict mode выдаст ошибку.
    А в обычном режиме броузер подставит переменную как свойство глобального объекта. То есть: a === window.a
    Далее, про скопы.
    Если переменная объявляется вне функции, она попадает также в свойство глобального объекта. Если в функции - в область видимости этой функции. То есть:
    var a=1;
    function f() {
    var b=2;
    window.c=3;
    console.log(a,b,c);
    }
    
    console.log(a,b,c);
    Ответ написан
    Комментировать
  • Как построить сетку календаря на JS?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    Для любого месяца и года:

    // Элементы с id month и year должны содержать int значения нужного месяца и года соответственно
    		var mon = document.getElementById('month').value - 1; // месяцы от 0 до 11
    		var year = document.getElementById('year').value; //Cook.get('year') ||
    		// alert(year+' '+mon) //2012
    		var d = new Date(year, mon),
    			table = '<table id="cal"><tr><th>пн</th><th>вт</th><th>ср</th><th>чт</th><th>пт</th><th>сб</th><th>вс</th></tr><tr>';
    		//alert(d)
    
    		for (var i = 0; i < getDay(d); i++) {
    			table += '<td></td>';
    		}
    
    		// ячейки календаря с датами
    		while (d.getMonth() == mon) {
    			table += '<td>' + d.getDate() + '</td>';
    			if (getDay(d) % 7 == 6) {
    				table += '</tr><tr>';
    			}
    			d.setDate(d.getDate() + 1);
    		}
    
    		if (getDay(d) != 0) {
    			for (var i = getDay(d); i < 7; i++) {
    				table += '<td></td>';
    			}
    		}
    
    		table += '</tr></table>';
    
    function getDay(date) {
    		var day = date.getDay();
    		if (day == 0) day = 7;
    		return day - 1;
    	}
    		console.log("table= ", table);
    Ответ написан
    Комментировать
  • Как можно сделать выбор из элемента массива по первому слову,которое начинается с #?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    function f(a) {
      return a.map(function(el) {
        return el.charAt(0)==='#'? el.substr(1): null
      })
    }
    console.log(f(["#вася", "петя", "#пища", "вал", "#валик"]));
    Ответ написан
    Комментировать
  • Эталонные примеры ООП js кода?

    KorniloFF
    @KorniloFF Куратор тега JavaScript
    Работаю по font-end / JS
    JS - это не совсем ООП. Можно писать в его стиле, в ES6 добавлен синтаксический сахар как раз для классики.

    Классическое ООП наследование на ES-6.
    class first {...}
    class second extends first {...}
    Ответ написан
    Комментировать