Ответы пользователя по тегу JavaScript
  • Как в javascript удалить обьект?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Переменную удалить невозможно — она живёт ровно до уничтожения контекста, в котором объявлена.
    Можно присвоить ей null или undefined.
    Удаляется же только свойство объекта.

    То есть вам следует поступить так:
    var iconsObj = {
    	// много картинок
    };
    // тут используем в цикле эти картинки
    iconsObj = null;

    либо так:
    window.iconsObj = {
    	// много картинок
    };
    // тут используем в цикле эти картинки
    delete window.iconsObj;
    Ответ написан
    1 комментарий
  • Почему не запускается jquery плагин?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Там жуткая мешанина и предложенных шагов явно маловато для оформления.
    jsfiddle.net/petroveg/9mkucgtg/2
    Ответ написан
    1 комментарий
  • Как показывать номер слайда?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    $(function () {
    	$('.flexslider').flexslider({
    		animation: 'slide',
    		start: function (slider) {
    			$(document.body).removeClass('loading');
    			show(slider);
    		},
    		after: show
    	});
    
    	function show (slider) {
    		console.log('Сейчас: ' + (slider.animatingTo + 1) + ' из: ' + slider.count);
    	}
    });
    Ответ написан
    Комментировать
  • Как орагнизовать наследование в Javascript таким образом, чтобы наследовались статические методы?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    А кому немного извращений? Функции же у нас — первоклассные граждане:)

    var SuperClass = function (callback) {
    	callback.staticMethod = function () {
    		console.log('I\'m static');
    	};
    	return callback;
    };
    
    var Parent = SuperClass(function () {
    	this.foo = 'foo';
    });
    Parent.prototype = {
    	method: function () {
    		console.log('I\'m not static');
    	}
    };
    
    var Child = SuperClass(function () {
    	Parent.apply(this, arguments);
    	this.bar = 'bar';
    });
    Child.prototype = Object.create(Parent.prototype);
    
    var kid = new Child();
    
    console.log(kid.foo);
    console.log(kid.bar);
    kid.method();
    Parent.staticMethod();
    Child.staticMethod();


    И кстати, из-за этого:
    Child.prototype = new Parent()
    вы получаете в прототипе Parent свойство foo. Вы точно этого хотели?
    Ответ написан
    Комментировать
  • Как отменить нумерацию определенных строк (td)?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Ах уж эти вездесущие скриптостроители:)
    jsfiddle.net/gxejzg59

    table{
    	counter-reset:test;
    }
    tr:nth-child(n+3):nth-last-child(n+3) td:nth-child(7n-2):before{
    	counter-increment:test;
    	content:counter(test);
    }
    Ответ написан
    8 комментариев
  • Как сделать скроллинг плавным?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Зачем вы крутите оба элемента? По-хорошему нужно только в корневом:
    $(document.documentElement).animate({ scrollTop: destination }, 500);


    Но в режиме Quirks Mode в обычных браузерах и в webkit всегда нужно крутить body:
    $(document.body).animate({ scrollTop: destination }, 500);


    Обращаться к элементам именно так, а не указывать для парсинга имя тэга.
    В итоге примерно так:
    var element = 'WebkitAppearance' in document.documentElement.style || document.compatMode == 'BackCompat' ? document.body : document.documentElement;
    $(element).animate({ scrollTop: destination }, 500);
    Ответ написан
    5 комментариев
  • Как мне применить код для каждой формы на сайте?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    $('#load').each(...)

    Вы это серьёзно?)) На странице есть единственный элемент с уникальным значением id.

    Убирайте id из элементов формы и работайте с именами полей — атрибут name. Они для этого и придуманы.
    Для перебора форм (можно даже и для элементов — тут нужно смотреть) используйте пользовательские атрибуты data-....
    Отслеживать нужно не click на кнопке, а submit для формы.
    Ответ написан
    Комментировать
  • Как узнать уровень фронтенд разработчика?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    @tnorman уровень логики не ниже, чем на серверной стороне?)) Посмешили.
    Фронт-енд разработчик должен разбираться во фронт-енде, а не в PHP — фтопку PHP, вообще никакого PHP.

    Основы построения баз — да, поскольку появится возможность работы с базами напрямую. Понимать принципы общения с сервером и другими компьютерами, знать про HTTP-заголовки, политику безопасности и, в частности, политику происхождения документа. То есть знание XMLHttpRequest, CORS и (хотя бы) представление о WebSocket, WebRTC.

    Разбираться в клиентских технологиях — HTML, CSS, Javascript, SVG, canvas, многочисленные API, описанные в HTML. И если не знать про WebGL и API, то разбираться зачем это и к чему. Построение DOM, CSSOM, понимание узких мест и тенденций. Основные семантические конструкции и микроданные.

    Понимать box model, visual formatting model, stacking context, работу с формами и элементами, медиа-элементами. Знать, что такое кодировка и как жить с разными кодировками при необходимости, хотя это уже редкость.

    ООП соглашусь — наследование, инкапсуляция, понимание роли прототипов и умение их использовать. Знание основных паттернов и парадигм. Добавлю модель событий — просто знание (не жалкие 5 штук, а реальный охват, включая MutationObserver). Ну и регулярные выражения.

    AJAX? Если не брать в расчёт XML-RPC, SOAP, WSDL, то выделять это в отдельный вопрос не стоит. А вот event loop (включая tasks и microtasks), на который завязана модель событий и все асинхронные вызовы знать обязательно. Также быть в курсе, что такое promise, зачем они и как использовать.

    Знать основы проектирования, UX и построения UI. Очень много в работе фронт-енда основано на взаимодействии человека и интерфейса. Непонимание основ UX приводит к неприятным последствиям.

    Что же насчёт Backbone или других конкретных технологий — это вообще дело наживное и акцентировать внимание не стоит. Опыт приветствуется, но не является обязательным. ну только если проект не горит.
    Безусловно, знание технологий разработки нужно, но я бы тогда поставил на Node.js, Grunt/Gulp, AngularJS.
    Ответ написан
    5 комментариев
  • Как изменить событие нажатия клавиш?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Уберите все скрипты со страницы и посмотрите — это нативное поведение браузера.
    Придётся добавлять перенос вручную. Можно вот так по-рабоче-крестьянски влупить строчку:

    if (code == 13) {
    	if (event.ctrlKey) {
    		elem.val(elem.val() + '\r\n');
    	} else {
    		event.preventDefault();
    		scope.$apply(attrs.enterSubmit);
    	}
    }

    Update: Начинка всё равно на нативном Javascript, так что без разницы, в каком языке.
    target — это ссылка на textarea, e — на событие.
    if ((e.keyCode || e.which) == 13) {
    	if (e.ctrlKey) {
    		if (target.selectionStart) {
    			var start = target.selectionStart;
    
    			target.value = target.value.slice(0, start) + '\r\n' + target.value.slice(target.selectionEnd);
    			target.selectionStart = target.selectionEnd = start + 1;
    		} else {
    			var range = document.selection.createRange();
    
    			range.text = '\r\n';
    			range.collapse(false);
    			range.select();
    		}
    	} else {
    		e.preventDefault();
    		// тут делаем ку
    	}
    }
    Ответ написан
  • Как сделать код?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    $("textarea").val().split(/\s+/);
    Ответ написан
  • Javascript, объясните свойство конструкции?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    var form = document.getElementById('defaultForm');
    
    if (form) {
    	form.appendChild(this.containers.trigger);
    }


    Смысл в проверке существования элемента. И во втором случае у вас синтаксис неверный.
    Javascript — язык нормальный и вполне очевидный.
    Ответ написан
    3 комментария
  • Как разделить текст без повторений?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    var start = ('кораблик плавал плавал и утонул').split(' ');
    
    for (var i = 0, result = [], _result = {}, stroke; i <= start.length; i++) {
    	for (var j = 0; j < i; j++) {
    		stroke = start.slice(j, j + start.length - i + 1).join(' ');
    
    		if (!_result[stroke]) {
    			_result[stroke] = result.push(stroke);
    		}
    	}
    }
    
    console.log(result);


    jsfiddle.net/petroveg/agwtd8vz
    Ответ написан
  • Как скачать файл через XMLHttpRequest?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    if(xhr.readyState != 2) return;
    Функция вызывается при каждой смене readyState. Это значит, что когда readyState будет равен 4, функция выполнит возврат.

    xhr.onreadystatechange = function (data) {
    	if (this.readyState == 2) {
    		clearTimeout(timeout);
    	} else if (this.readyState == 4) {
    		if(this.status == 200){
    			console.log(data);
    		} else {
    			// вывести ошибку
    		}
    	}
    }


    Кстати, современные браузеры поддерживают timeout в экземплярах XMLHttpRequest (кроме... Safari:)
    Ответ написан
  • Как определить IE включая 11?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Conditional compilation

    Вариант с ветвлением:

    /*@cc_on @if (@_jscript)
    console.log('Я — осёл и мой номер ' + @_jscript_version);
    @else @*/
    document.write('Я — обычный современный утюг');
    /*@end @*/


    Ну а так только для IE:

    /*@cc_on
    console.log('Я — осёл и мой номер ' + @_jscript_version);
    @*/
    Ответ написан
    Комментировать
  • Почему не работает модификация DOM в XHTML?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    При создании элементов (и атрибутов) в пространствах имён (это то, что указано в атрибуте xmlns) требуется вызов createElementNS с указанием этого самого пространства

    var test = document.createElementNS('http://www.w3.org/1999/xhtml', 'i');


    Технически, можно и не указывать пространство, но тогда все элементы будут относиться к тому пространству, в котором расположен глобальный контекст (это если вы решите динамически inline SVG модифицировать).

    Напишите маленькую функцию (или прототип jQuery расширьте). Можете сделать её и немаленькой — с парсингом строки для выделения имени тэга и атрибутов.

    $.extend($, {
    	createNS: function (tag, ns) {
    		return $(document.createElementNS(ns, tag));
    	}
    });
    
    $(function () {
    	$.createNS('i', 'http://www.w3.org/1999/xhtml')
    		.text('added tag')
    		.appendTo($('#parent'));
    });


    Update: причину глюка верно указал @SelenIT2 — заключите в CDATA свой скрипт. И вообще следуйте требованиям синтаксиса и структуры XML.

    Тем не менее, вопрос о пространстве имён имеет значение при генерации элементов и атрибутов из пространства, отличающего от того, в котором находится глобальный контент (SVG, RDFa и т.п.).
    Ответ написан
    Комментировать
  • Как подсчитать количество символов в input?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    jsfiddle.net/0hfxqn7w

    $(document).on('input', 'input[type="text"]', function () {
    	console.log($(this).val().length);
    });
    Ответ написан
    3 комментария
  • Пишу html/css/js песочницу для будущих курсов по веб- разработки. Как с помощью JQuery связать div и iframe?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Если вы собираетесь учить людей веб-разработке, то такие простейшие вещи должны знать. Хотя бы разобраться, как это сделано в десятках работающих сайтов типа codepen или jsfiddle.
    Ответ написан
    2 комментария
  • Почему этот код паттерна в PHPStorm подсвечивается как ошибочный и не работает?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Потому что вы смешали синтаксис перечисления свойств объекта и присвоения свойствам объекта значений.

    Либо так

    var module = (function () {
        var counter = 0;
    
        return {
    		incrementCounter: function() {
    			return ++counter;
    		},
    		resetCounter: function () {
    			return counter = 0;
    		},
    		getCounter:function () {
    			return counter;
    		}
    	};
    })();


    Либо так

    var module = (function () {
        var counter = 0,
            module = {};
    
        module.incrementCounter = function() {
            return ++counter;
        };
        module.resetCounter = function () {
            return counter = 0;
        };
        module.getCounter = function () {
            return counter;
        };
    
        return module;
    })();
    Ответ написан
    Комментировать
  • Как организовать обмен данными между обработчиками jQuery?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Логично выглядит запуск процедуры по клику с передачей id удаляемой сущности.
    В этой процедуре может вызываться модальное окно, но этому окну знание переданного id не нужно — у него задача лишь получить согласие (или отказ) на продолжение действий.
    Получив ответ от модуля окна, процедура выполняет одно из возможных действий.

    Всё это реализуется и без наличия объекта в замыкании всех обработчиков.
    Ответ написан
    Комментировать
  • Не работает функция JS, ошибка TypeError: re_anwer.exec(...) is null. Кто знает почему?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Причина одна — в результате выполнения exec совпадений не найдено и потому вернулся null. А вы запрашиваете у null первый элемент, как будто это — массив.

    var result = /<hash>([0-9a-z]+)<\/hash>/gi.exec(datart);
    if (result) {
    	$('#s').val(result[1]);
    	$('#submit').removeAttr("disabled");
    }


    Вообще вам бы неплохо смотреть, что приходит и пытаться выполнить метод с конкретной строкой ответа. Для этого нужно всего лишь нажать на F12 и открыть вкладку «Сеть».
    Ответ написан