Ответы пользователя по тегу JavaScript
  • Кто как делает html формы?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Современная форма - это комплекс решений, в разных областях. И поставить один модуль который решит проблему - не возможно в принципе. Каждый специалист может собрать свою часть. Но без архитектора который скажет как это скрутить в кучу, будет велосипед с квадратными колесами - ехать можно но по специальной дороге.

    1. Разметка:
      • пишу всегда вручную;
      • длинные селекты тянутся из базы посредством шаблонизатора (например серверного TWIG);
      • прописываю полностью с атрибутами валидации HTML5 (благо все современные браузеры потдерживают);
      • выдумывать JS-велосипеды для валидации не стоит уже давно;
      • для зависимых полей пока есть простой js-клаcс сверяющий их.
      • drag&drop файлов давно уже работает без JS;
      • для подгрузки изображений в страницу на стороне клиента js-класс.

    2. Стили:
      • один раз прописаны стили для разных-форм на уровне тегов и взаимоотношений тегов (в итоге все формы на сайте виглядят в одном стиле);
      • класы только для самой формы, определяет как одна выводится: локально, модально или в теле контента;
      • кому сложно написать 300 строчек CSS, пользуйтесь фреймворками;
      • ни в коем случае не делайте стили форм для каждого раза как онные встречаются (придет дядя даст по рукам :) ).

    3. Отправка:
      • пользуйтесь action, submit и target;
      • нужны данные как модальное окно есть iframe;
      • ajax с формами не использую он изначально предназначен для другого:
        • для подгрузки полей в селектор, но только если селектор очень большой;
        • для поиска налету.


    4. Сервер:
      • использую специальный статический класс, который делает валидацию и XSS/injection-очистку;
      • как минимум PDO с подготовленными запросами;
      • Doctrine;

    5. База-данных:
      • наименования полей в базе соответствуют наименованиям полей в формах (с префиксом);

    Ответ написан
    1 комментарий
  • Как сделать прелоадер?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    <head>
          ...
          <script ...>
          <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/3.2.0/imagesloaded.pkgd.min.js"></script>
          ...
    </head>
    <body>
          ...
          ...
          <img src=" image.png ">
          ...
          ...
          <script> 
                var imgLoad = imagesLoaded( 'img' );
                function onAlways( instance ) {
                      console.log('all images are loaded');
                }
                // bind with .on()
                imgLoad.on( 'always', onAlways );
                // unbind with .off()
                imgLoad.off( 'always', onAlways );
          </script>
    </body>
    Ответ написан
  • Как сверстать такое подменю?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Для блока содержащего подпункты
    display: inline-block;
    position: absolute;
    top:0;
    bottom:0;

    Для блока содержащего пункты
    position: absolute;

    Блок содержащий подпункты должен быть следующим за пунктом.

    JSfiddle
    P.S. Использовать ul li для меню несколько неправильно. Когда-то был большой спор. И пришли к выводу, что семантичнее его не использовать. И не плодить лишние блоки, тег А всегда приходится вкладывать в LI. Но много людей остаются при своем мнении.
    Ответ написан
    7 комментариев
  • В какой последовательности пишете JavaScript код?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Правильные вопросы задаёте...

    Во-первых: Последовательность в Java Script не важна, но нужно понимать ход выполнения. Например:
    function Mun(a){ return a };
      ( function(a){ console.log(a+' пошел'); } )( Mun('Первый') )
      /* Результат сразу же - Первый пошел */
      /* Мы создали функцию и выполнили её */
    
      function MunGo(a){ console.log(a+' ушел'); };
      function Mun(a){ return 'Не '+a };
      MunGo(Mun('Первый'));
      /* Выдаст - Не Первый ушел. */


    Во-вторых: Понимайте контекст описаной функции, и не вызывайте её из друго контекста.
    ... /* продолжая верхний пример*/ 
        (  function(a) {
              var Mun = function(a){ return a+' и третий'};
              MunGo ( Mun(a) );      /* Выдаст - Второй и третий ушел */
         }
       ) ( 'Второй');
      MunGo( Mun ('Второй') );    /* Выдаст - Не Второй ушел */


    В-третьих:
    Цикл должен быть максимально простым. Вынесите из него все возможное и не возможное. Это его сильно ускорит. Не только объявления но даже вызовы функций, создание нод, даже обращение к полям объектов старайтесь сделать вне цикла. Внутри цикла опперируйте только переменными локального контекста.

    В-чертвертых: Используйте анонимний контекст для всего своего кода, а взаимодействие между разными анономными контекстами делайте через события.
    Ответ написан
    1 комментарий
  • Как показать div на половину, при hover показать div полностью?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    .display {                               /* пропиши свои размеры */
           height:100px;                    /* высота раскрытого */
           max-height:50px;              /* высота скрытого */
       }
       .display:hover {
           max-height:100px;           /* опять высота раскрытого */
       }
    Ответ написан
  • Сразу виден конечный результат. Почему функции не выполняются последовательно?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Или подойти по другому и явно распаралелить потоки:

    function animationDiv() { 
    $('.first-title, .second-title','.first-section').delay(500 /*3000*/)     //  пауза забольшая 500мс для пустототы достаточно
    .fadeOut(700,function(){
         $('.first-title','.first-section').html('Общая емкость 5712 паллето мест');
         $('.second-title','.first-section').html('Работаем круглосуточно')
    }).fadeIn(700)
    .delay(3000)
    .fadeOut(700,function(){
         $('.first-title','.first-section').html('Офисные помещения в аренду');
         $('.second-title','.first-section').html('Оборудованные минимаркеты для продажи товара рядом с хладокомбинатом')
    }).fadeIn(700)
    .delay(3000)
    .fadeOut(700,function(){
         $('.first-title','.first-section').html('Полностью автоматизированный склад класса А');
         $('.second-title','.first-section').html('Температурный режим до -25 С')
    }).fadeIn(700);
    }


    JSFiddle
    Ответ написан
    Комментировать
  • Как при создании элемента в JQ, в дальнейшем на нем перехватить событие?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Есть делигированные собития, это когда событие висит на родительском блоке, а обрабатывается на потомке без железной привязки. Появился - событие работает, пропал событие есть но нет объекта и оно не работает. Вешается один раз на родителя.

    $(".colors").on("click", ".CancelFramework" ,function(){
          $( '.colors' ).removeClass('colorBorder');
          $( 'div.color div' ).remove();
          $( 'div.color strong' ).remove();
          $( 'div.color' ).fadeOut(500);
          filterObj();
    });
    Ответ написан
    Комментировать
  • Как к функции прикрутить XDomainRequest?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    function getXmlHttp() {
        var xmlhttp;
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                (typeof XMLHttpRequest != 'undefined') && (xmlhttp = new XMLHttpRequest() ) ||
                (typeof XDomainRequest != 'undefined') && (xmlhttp = new XDomainRequest() );
            }
        }
    
        return xmlhttp;
    }


    Если запрос Cross-Origin Resource Sharing то Opera mini его не держит совсем.
    Can I use...
    Ответ написан
  • Как найти на странице input:password если страница подгружается через Ajax?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    var i = 6490,
         password = 1751,
         success = false,
         aclp = {
                      url: "login.php",
                      type: "POST",
                      data: {'password': password},
              success: function(data) {
                   if ( data.match(/input type="password"/gi) ) return success = true;     /* проверяем*/
                   password++;
                   i++;
                   acl();
              } 
         }; 
    
    function acl () {
          $.ajax(aclp);
    };
    Ответ написан
    Комментировать
  • Почему не корректно работает регулярка?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Используй онлайн тестер: Например.
    И старайся упрощать... а не усложнять.

    function getStrongText(value) {
      var str = 'Hello world hello123',
      regex = new RegExp(value, "gi");
      return str.replace(regex, '<strong>$&</strong>');
    }	
    console.log(getStrongText('Hello'));


    Если нужно искать только слова, а не части слов то нужно делать слегка иначе.

    function getStrongText(value) {
      var str = 'Hello, world hello123',
        pattern = "(\s|^)"+value+"(\W|\s|$)",
        regex = new RegExp(pattern, "gi");
        return str.replace(regex, "$1<strong>$2</strong>$3");   
    }	
    console.log( getStrongText('hello') );


    В твоем примере замена производилась трёх значений. $& значит все найденные субпатерны в одной итерации, а у тебя три субпатерна.
    <strong>$&</strong> все равно, что <strong>$1$2$3</strong>
    Ответ написан
  • Как правильно понять этот сложный код?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Учи матчасть...

    /* Функция асинхронной загрузки хеадера */
    function getHeader() {
      $.post('modules/constructor.php',     /* Аппелируем к серверному скрипту по указаному адресу */
          { 'action': "header", 'lang': lang },   /* Передаем параметры на сервер */
           function(data) {                            /* Callback - параметр анонимня функция. Вызывается при удачном запросе */
              $('div#header')                          /* Выбираем #header - но правильнее $('#header'), ибо 2 блока с одним id не правильно */
                 .empty().append(data);           /* Очищает выбраный блок и дописывает к нему полученные данные */
           	}
          ).done(function() {                         /* Событие выполняется после удачного выполнения запроса */
            getFooter()                                 /* Вызов запроса Fotter */
          })
    }
    
    /* далее аналогично но для footer */
     
    function getFooter() {
      $.post('modules/constructor.php',    
          { 'action': "footer", 'lang': lang },    
           function(data) {                            
              $('#footer').empty().append(data); 
           	}
          ).done(function() {
            getScriptHandF();              /* Здесь была синтаксическая ошибка: отсутствие замыкающего ";" */
            getContent(content)
          })
    }
    function getContent(cont) {
      $.post('modules/constructor.php', 
          { 'content': cont, 'lang': lang, 'device': devi },
           function(data) { 
              $('#content-wrapper').empty().append(data); 
           	}
          ).done(function() {
    
    /* Далее человек питался сделать прелоадинг картинок. НО! */
    /* Картинки уже начались загружатся после  выполнения
     колбеков из загрузок getContent, getHeader, getFoоter */
            var paths  = [];                  /* Готовим массив для прелоадинга картинок */
            var images = $('body').find('img');    /* Выбираем все картинки */
            images.each(function() {                  /* Пробегаемся по всем картинкам */
              paths.push($(this).attr('src'));          /* Записываем ссылку на картинку в масив */
            });
             
            preloadImages(paths, function () {   /* Вызывает preloadImages Описания процедуры нет */
              $("html,body").animate({"scrollTop":0},200);  /* Анимирует скроллинг если страница прокручена на верх страницы */
              $('#preload').fadeOut(1000);   /* Анимирует прозрачность кроющего блока #preload */
              getScript();                              /* Вызывает getScript */
              if (cont=="home") getSlider(); /* Вызывает getSlider если страница домашняя */
            });
          })
    }
    Ответ написан
    2 комментария
  • Как удалить автоматическую прокрутку на слайдере?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Когда инициализуруэш карусель пропиши autoplay:false.

    Например:
    $('.owl-carousel').owlCarousel({
       /* здесь могут быть ваши параметры инициализации карусели */
        autoplay:false
    });
    Ответ написан
  • Как обновить курсор в браузере когда блоки под курсором обновляются но курсор стоит на месте?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    В таких случаях Z-index не поможет...
    Маленький квадрат нужно убрать совсем или через fadeOut или через коллбек...
    $('div').click(function(){
        $('div').fadeOut(200)
    });
    $('div').click(function(){
        $(this).css({opacity: 0},function(){$(this).css({'display':'none'});})
    });
    Ответ написан
    Комментировать
  • Всплывающие окно предупреждения JS?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    <form method="get" id="delForm">
      <input id="dell" type="button" name="dell" value="Delete">
    </form>


    Создаем простую кнопку вместо Submit.

    function checkButton()
    {
      var hid = document.getElementById('hidden'); //Находим id всасывающегося окна
      var yes = document.getElementById('yes'); // id кнопки ДА
      var no = document.getElementById('no'); // id кнопки НЕТ
      
      yes.onclick  = function(e) //если будет нажата кнопка ДА
      {
        var frm = document.getElementById('delForm'); //Находим id формы
        this.onclick = null;
        hid.className = ''; // скрывается окно подтверждения
        frm.submit();  //// отправка на сервер происходит
        e.stopPropagation();
        e.preventDefault();
      };
      no.onclick = function(e) // Если будет нажата кнопка НЕТ
      {
        var hid = document.getElementById('hidden'); //Находим id всасывающегося окна
        this.onclick = null;
        hid.className = ''; //скрывается окно подтверждения
        // отправка на сервер не происходит
        e.stopPropagation();
        e.preventDefault();
      }
    
       // Oтображается окно подтверждения.
       hid.className = 'substrate';
    }
    
    window.onload = function(e)
    {
      var myf = document.getElementById('dell');
      myf.onclick = checkButton; //Подписка на событие клика по кнопке УДАЛИТЬ
      e.stopPropagation();
      e.preventDefault();
    }

    И привязываем события, а не проверяем наличие привязаного события на кнопках yes и no

    И еще поправим CSS:
    .show-none{
      display:none;       /* просто прячем окно, а не задвигаем его в минуса */
    }
    .substrate{
    ...
    Ответ написан
  • Как использовать полученные данные через Ajax далее в коде?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    var Var;
    $.get(url + 'pages/read.json', {events: true} ,function(data) {
              Var = data
          }
      });


    Или глобально в контексте Window...
    $.get(url + 'pages/read.json', {events: true} ,function(data) {
              window.Var = data;
          }
      });


    Или в контексте своего обекта:
    MyObj = {Var:'Ответ от сервера не пришел!' // <- Сдесь можно вставить данные по-умолчанию}; 
    $.get(url + 'pages/read.json', {events: true} ,function(data) {
              MyObj.Var = data;
          }
      });

    Ваши значение по-умолчанию поменяються как только прийдет ответ от сервера...
    Ответ написан
    2 комментария
  • Изменение параметра отдельного свойства элемента через jQuery?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    То что ты просил:
    $('a').css({border-bottom-color:'rgba(100,100,100, 0 или 1)'});


    Но делается это проще через CSS...
    a{
       font-family: 'Open Sans', sans-serif;
       font-weight: 500;
       font-size: 14pt;
       letter-spacing: 1px;
       color: #fff;
       border-bottom: 2px solid rgba(100,100,100, .1);  /*  .1 (90% прозрачности), 0 будет прозрачным */
       &:hover{
          border-bottom-color: rgba(100,100,100, 1);  /*  1 (0% прозрачности), 0 будет прозрачным */
       }
    }
    Ответ написан
    Комментировать
  • Как получить width в jquery?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Можно читать и менять прямо в стилях. Там точно в процентах.

    document.styleSheets[{stylesheet number}].cssRules[{rule number}].style.width = "40%";


    P.S. Думаю скрипт для поиска {stylesheet number} и {rule number} не составит проблем.
    Ответ написан
    Комментировать
  • Как сделать чтобы исчезал div при нажатии на другой div?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    document.querySelector('div.toClick').onClick = function(){
         document.querySelector('div.toHide').style.display = "hidden";
       }
    Ответ написан
    Комментировать
  • Как подключить скрипт после загрузки ajax?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    jQuery.getScript()
    Делает запрос к серверу без перезагрузки страницы, с запросом javascript файла. При получении запрошенного файла, код внутри него будет автоматически выполнен. Метод имеет параметры:
    jQuery.getScript(url, [success(data, textStatus)]):XMLHttpRequestv:1.0
    url — url-адрес js-файла.
    success(data, textStatus) — пользовательская функция, которая будет вызвана после удачного выполнения загруженного js-файла.

    data — данные, присланные с сервера.
    textStatus — статус того, как был выполнен запрос.
    Примеры

    Запросим у сервера файл "test.js", который будет автоматически выполнен, как только загрузится:
    $.getScript("test.js");

    Загрузим файл и выведем сообщение, после его удачного выполнения:
    $.getScript("test.js", function(){
       alert("Скрипт выполнен.");
     });
    Ответ написан
    7 комментариев
  • Как заставить скрипт, остановиться?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    В файле HTML должно быть:
    <html>
    <head>
    ...
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script type="text/javascript" src="materialPreloader.js"></script>
    <link rel="stylesheet" type="text/css" href="css/materialPreloader.css"> 
    <script type="text/javascript">
    jQuery(document).ready(function($) {
        preloader = new $.materialPreloader({
            position: 'top',
            height: '5px',
            col_1: '#159756',
            col_2: '#da4733',
            col_3: '#3b78e7',
            col_4: '#fdba2c',
            fadeIn: 200,
            fadeOut: 200
        });
        $(window).on('load', function(){console.log('BlaBla'); preloader && preloader.off();});
        preloader.on();
        setTimeout(preloader.off,9000);
    });
    </script>
    Ответ написан
    33 комментария