• Как узнать индекс найденного значения и реализовать поиск значения по индексу?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Для нахождения индекса первого вхождения можно использовать String.prototype.indexOf()
    Если значение не найдено - вернет -1. От этого и плясать. (Ну если я правильно понял задачу).
    Ответ написан
  • Каким образом запросить все измененные элементы формы?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Все значения формы можно получить при помощи jQuery метода .serializeArray().
    Посмотри, как там все реализовано и сделай на js.

    Если интересует получение ТОЛЬКО измененных данных - после редактирования каждого поля записывать измененные данные в объект и в базу отправлять только эти данные.

    Реализовать это можно так:
    Повесить слушатель изменения содержимого на каждое поле и при возникновении события записывать значения в объект.
    Ответ написан
    3 комментария
  • Насколько правилен код? Можно ли упростить?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    1) Кешируйте элементы. Зачем каждый раз искать элемент в DOM, когда это можно сделать один раз, а потом использовать просто переменную.
    2) Используйте строгое равенство ===
    3) Когда в выборке несколько элементов и нужно ко всем применить одно и то же действие, jQuery перебирает поэлементно выборку и применяет действие к каждому элементу.
    Как указано выше, достаточно использовать $(".tags_cloud div").removeClass("is_active");
    Просто решил объяснить, почему этого достаточно.
    Ответ написан
    Комментировать
  • Как получить результат формы во всплывающем окне?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Ajax-запросом отправляем данные на сервер, а далее 2 варианта:
    1. Возвращать верстку всплывашки вместе с результатами формы
    2. Использовать возможности ES6 - шаблонные строки и вставлять результаты запроса в шаблон и выводить на экран


    Второй вариант, по-моему, лучше, т.к. меньший объем данных возвращается с сервера.
    Ответ написан
    3 комментария
  • Как можно исправить сие JS недоразумение?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Можно сделать флаг и проверять его состояние при наведении.
    Ответ написан
    Комментировать
  • Как поменять содержимое Один при скроле мышкой вниз на Два, а при обратке - вернуть назад?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Повесить обработчик:
    $('body').on('scroll', function () {
    });

    Перед скроллирование закешировать нынешнее положение .scrollTop():
    var $basePosition = $('body').scrollTop();
    Далее проверять новый scrollTop() с закешированным.
    Если новый больше - прокрутка была вниз, если меньше - вверх.
    if (newScroll > $basePosition ) {
      $block.html($one);
    } else {
      $block.html($two);
    }

    Думаю, как поменять значение в блоки вы знаете :)
    Ответ написан
  • Как сделать пропорции картинки в слайдере?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Как-то делал функцию ресайза изображений в слайдере. Гляньте, может что полезное найдете. Кое-где даже комменты есть.
    resizeImg: function (slide) {
            slide = slide || this._slides[this._currentSlide];
    
            var originImg,
                newWidth = 0,
                newHeight = 0,
                $body = document.documentElement,
                screenWidth = $body.clientWidth,
                screenHeight = $body.clientHeight,
                percent = 0.9;
    
            /*
             * Изменяем по ширине
             */
            var resizeW = function (oH, oW) {
                var originHeight = oH || 0,
                    originWidth = oW || 0;
    
                this.$imgWrap.removeAttr('style');
                newWidth = parseInt(screenWidth * percent, 10);
                this.$imgWrap.
                        css({
                            width: newWidth,
                            height: parseInt((newWidth * originHeight)/originWidth)
                        });
            }.bind(this);
    
            /*
             * Изменяем по высоте
             */
            var resizeH = function (oH, oW) {
                var originHeight = oH || 0,
                    originWidth = oW || 0;
    
                this.$imgWrap.removeAttr('style');
                newHeight = parseInt(screenHeight * percent, 10);
                this.$imgWrap.css({
                    width: parseInt((newHeight * originWidth)/originHeight),
                    height: newHeight
                });
            }.bind(this);
    
            // определяем оригинальный размер картинки
            originImg = new Image();
            originImg.onload = function () {
                var $this = originImg,
                    originWidth = $this.width,
                    originHeight = $this.height,
                    modalWrap = $(this._modal.content()).find('.js-modal-comtent-wrap');
    
                /*
                 * Если оригинал изображения меньше размера экрана
                 * оставляем его без изменений
                 */
                if (originWidth < screenWidth && originHeight < screenHeight) {
                    this.$imgWrap.css({
                        width: originWidth,
                        height: originHeight
                    });
                    modalWrap.css({
                            width: this.$imgWrap.width(),
                            'min-width': this.$imgWrap.width()
                        });
                    this.$img.
                            removeAttr('style').
                            css({
                                'min-width': '0',
                                width: originWidth,
                                height: originHeight
                            });
    
                    this.$nextSlideBtn.height(this.$img.height());
                    this.$prevSlideBtn.height(this.$img.height());
                    this._modal.update();
                    return;
                }
    
                /*
                 * Если оригинал изображения больше размера экрана,
                 * пробегаемся по условиям:
                 * если ширина оригинала >= ширине экрана
                 *      то ресайз по ширине экрана
                 *
                 *      если новая высота обертки >= высоте экрана
                 *          то ресайз по высоте экрана
                 *
                 * или если высота оригинала >= высоте экрана
                 *      то ресайз по высоте экрана
                 *
                 *      если новая ширина обертки >= ширине экрана
                 *          то ресайз по ширине экрана
                 */
                if (originWidth >= screenWidth * percent) {
                    resizeW(originHeight, originWidth);
    
                    if (this.$imgWrap.outerHeight(true)  >= screenHeight * percent) {
                        resizeH(originHeight, originWidth);
                    }
                } else if (originHeight >= screenHeight * percent) {
                    resizeH(originHeight, originWidth);
    
                    if (this.$imgWrap.outerWidth(true) >= screenWidth * percent) {
                        resizeW(originHeight, originWidth);
                    }
                };
    
                this.$img.
                        css({
                            'min-width': '0',
                            width: this.$imgWrap.width(),
                            height: this.$imgWrap.height()
                        });
    
                this.$nextSlideBtn.height(this.$img.height());
                this.$prevSlideBtn.height(this.$img.height());
    
                modalWrap.css({
                            width: this.$imgWrap.width(),
                            'min-width': this.$imgWrap.width()
                        });
                this._modal.update();
            }.bind(this);
            originImg.src = slide.src;
        },
    Ответ написан
    Комментировать
  • Как хранить блоки?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Можно шаблоны блоков подключать. А все данные по каждому блоку - хранить в базе данных. И содержимое и стили и т.д. и т.п.
    Например, нам нужен блок А. Мы идет в шаблоны, выбираем этот блок, подгружаем, выполняем с ним манипуляции. Сохраняем. В базу идет название блока, содержимое, стили (положение и т.п.)
    Потом, когда мы подгружаем существующие блоки, берем из базы название блока, подгружаем нужный шаблон блока, добавляем в него содержимое и стили с базы и выдаем пользователю.

    P.S. мог не правильно понять задачу. Можно обсудить все в комментах.
    Ответ написан
    1 комментарий
  • Как узнать width и height изображения по url?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Создаешь новый объект Image():
    var originImg = new Image();
    Задаешь функцию, которая выполняется, когда изображение загрузится. Тут как раз-таки и можешь отыскать нужные свойства картинки:
    originImg.onload = function () {
    // здесь необходимый код
    var $this = originImg; // теперь тут закешировано новое изображение с указанным url
                           // и можно делать с ним все что угодно
    }.bind(this);

    Задаешь атрибут src:
    originImg.src = slide.src;
    где slide.src - атрибут src изображения, которое хотим "пощупать"
    Ответ написан
    Комментировать
  • Как удалить теги p из определенного блока, оставив их содержимое?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Может так
    HTML:
    <div id="outer">
        <p> бла бла </p>
        <p> бла бла </p>
        <p> бла бла </p>
        <p> бла бла </p>
        <p> бла бла </p>
        <p> бла бла </p>
    </div>
    <input type="button" class="but" value="click">

    JS:
    $('.but').on('click', function () {
        var $outer = $('#outer'),
        	$p = $outer.find('p');
        $p.each(function () {
          $(this).remove();
        });
    });
    Ответ написан
    6 комментариев
  • Как отследить событие изменения в input (change почему то не работает)?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    В таком виде change срабатывает при клике на enter.
    HTML:
    <input id="foo" type="text" />
    JS:
    $(function () {
        $('#foo').on('change', function () {
            console.log('change');
        });
    });


    Если вам надо, чтобы проверка была при любом клике, то вот:
    $(function () {
        $('#foo').on('keydown', function () {
            console.log('change');
        });
    });
    Ответ написан
    1 комментарий
  • Как подгружать изображения в галерею?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    ajax-запрос не подойдет?
    Указывайте id последней загруженной картинки и количество, которое нужно загрузить.
    Получится универсальный запрос на подгрузку изображений
    Ответ написан
  • Как сделать чтобы скрипт срабатывал при обновлении страницы?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Он и так срабатывает при полностью загруженной странице.
    Если хочешь именно во время загрузки - дерево DOM еще не построится и тебе нечего будет искать.
    Если хочешь выполнить скрипт ПЕРЕД перезагрузкой страницы, покопай в сторону отлавливания события перезагрузки страницы, выполни свой скрипт а потом перезагрузи страницу.

    Редактирую.
    Вот так попробуй
    $(document).ready(function(){
        var $form = $('#filter'),
            $controls = $form.find('input,select,textarea');
    	
        // отправка после загрузки страницы
        startLoadingAnimation();
        $.post("/engine/ajax/filter.php", $("#filter").serialize(), function(response){
            setTimeout(function(){$('#dle-content').html(response); stopLoadingAnimation();}, 3000);
        });
        
        // отправка по клику на Enter
        $controls.on('change', function(){
            startLoadingAnimation();
            $.post("/engine/ajax/filter.php", $("#filter").serialize(), function(response){
               setTimeout(function(){$('#dle-content').html(response); stopLoadingAnimation();}, 3000);
        	});
        });
        
        // или отправка при любом изменении в поле
        //$controls.on('keyup', function(){
        //    startLoadingAnimation();
        //    $.post("/engine/ajax/filter.php", $("#filter").serialize(), function(response){
        //       setTimeout(function(){$('#dle-content').html(response); stopLoadingAnimation();}, 3000);
        //	});
        //});
    });
    Ответ написан
  • Как работает доступ к свойству объекта через квадратные скобки?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    counts[arr1[i]] = (counts[arr1[i]] || 0) + 1;
    counts[arr1[i]] ты приравниваешь, при наличии arr1[i] -> counts[arr1[i]] + 1, при отсутствии 0 + 1
    Ответ написан
  • Как сделать подгруздку текста в блок по таймеру?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Вот тебе для одного блока. Далее сам доделаешь.
    HTML:
    <ul>
        <li class="block_1"> <h1> </h1>    <p>  </p>  </li>
        <li class="block_2"> <h1> </h1>    <p>  </p>  </li>
        <li class="block_3"> <h1> </h1>    <p>  </p>  </li>
    </ul>

    JS:
    var json_date = {
       "dills": {
         "1": {
           "name": "boock_1",
           "time": "15:00",
         },
         "2": {
           "name": "book_2",
           "time": "15:00",
         },
         "3": {
           "name": "book_3",
           "time": "09:00",
    
         },
         "4": {
           "name": "book_4",
           "time": "05:00",
    
         }
       }
     }
    
    var ix = 1;
    setInterval(function () {
        var valName = json_date.dills[ix].name,
            obj = json_date.dills, 
            count = 0;
    
        $.each(obj, function () {
            count++;
        });
    
        (ix >= count) ? ix = 0 : ix = ix;
        $('.block_1').text(valName);
        ++ix;
    }, 1000);


    Ну и интервал - какой нужно задашь. 1000 - это в миллисекундах, т.е. 1 секунда.
    Ответ написан
    Комментировать
  • Как сделать чтобы скрипт отправлял форму на лету?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Отправлять форму "на лету" - не лучшая идея.
    Осуществить отправку можно по 2 событиям - изменение содержимого инпута (change) и клик клавишей (keyup).
    Чтобы сильно не насиловать сервак, на стороне клиента можно делать проверку на валидность данных. И только если данные валидны, отправлять. Валидность осуществлять при том же событии.
    Но вот вопрос - а точно ли пользователь хотел отправить именно эти данные на сервер (риторический)?
    Ответ написан
    Комментировать
  • Как вывести блоки в столбик?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Первую строчку заполняйте циклом от 1 с шагом 2, вторую - от 2 с шагом 2.
    Ответ написан
    Комментировать
  • Как реализовать подгруздку значений в блок при клике?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Как понял, так и показываю: тыц
    HTML:
    <p></p>
    <input class="js-but" type="button" value="my_button" />


    JS:
    var json_date = {
      "dills": {
        "1": {
          "name": "boock_1",
          "time": "15:00",
        },
        "2": {
          "name": "book_2",
          "time": "15:00",
        },
        "3": {
          "name": "book_3",
          "time": "09:00",
    
        },
        "4": {
          "name": "book_4",
          "time": "05:00",
    
        }
      }
    }
    
    var ix = 1;
    $('.js-but').on('click', function () {
        var valName = json_date.dills[ix].name;
        $('p').text(valName);
        ++ix;
    });
    Ответ написан
    Комментировать
  • Как вывести результат деления значения одного блока на другое?

    nepritimov_m
    @nepritimov_m
    Frontend dev.
    Можно так:
    $(function () {
        var weight = $('.weight'),
            price = $('.price').find('span'),
            rezult = $('.finish'),
            res = 0;
    
        res = Number(price.text())/Number(weight.text());
        rezult.text(res.toFixed(2));
    });
    Ответ написан
    Комментировать