Ответы пользователя по тегу JavaScript
  • Почему первый элемент массива определён, а остальные undefined?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, CryptBomj
    undefined = это значит вернул НИЧЕГО.
    Ничего, это значит не пустая строка и не NULL, это значит что вообще ничего не вернул, если в вашем json есть эти значения, а вернулся undefined - значит вы не верно указали вложенность.
    var second = spreadsheet.getSheetByName("2)Склад"); // такие частности лучше избегать, добавьте класс или id чтобы если текст поменяется, приложение не сломалось

    Например "2)Склад" на "2) Склад" - и нужное коде уже не найдёт.

    Ещё одна странность в коде:
    Почему вы сравниваете со строкой ? typeof undefined - это не строка, это пустота
    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    if (stolbec2[j] == stolbec1[l] && stolbec2[j] != undefined){
    ...
    }


    Вариации:
    if (stolbec2[j] == stolbec1[l] && !stolbec2[j]){
    ...
    }


    или
    if (stolbec2[j] == stolbec1[l] || !stolbec2[j]){
    ...
    }


    Я просто не знаю что возвращает json вы ведь с таблицей Excel работаете ?
    Задайте для третьего столбца значение по умолчанию, если вернёт undefined , то можно будет выводит значение по умолчанию, либо на значение пришедшее из таблицы, так сказать по ссылке.
    https://learn.javascript.ru/object-copy
    Ответ написан
  • Почему говорят что jquery не нужен?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Эмм...
    Я почитал комментарии в разных источниках, и на разных сайтах.
    Короче. Смысл в том, что jQuery морально устарел (не для меня, в общественном плане и смысле), сейчас jQuery уже не впечатляет так как раньше, соответственно, раз хайп улетучился, значит эта тема уже зашквар. Баян. Это как рассказывать смешной анекдот, который придумали 50 лет назад. Дело не в том, хороша шутка, или нет, просто уже надоело, все уже знают и слышали. Так получилось и с jQuery.
    Уже не цепляет. Ну и сейчас делать сайты на html\css\js уже не круто.
    Опять же, аргументирую. Упомянутые React/Angular/Vue - это инструменты, которые делают SSR, SPA, PWA. Да, можно заморочится и сделать такой сайт на jQuery, кто мешает? Делайте!
    Но зачем. С таким же успехом можно вбивать гвозди кулаком, зачем мне молоток? Я и так забью.

    Чтобы вы поняли, прошу успокоится, вдохнуть воздуха, и услышать:
    Заказчику не важно какой вы гуру в jQuery или JavaScript, пишите вы код на Java или на Паскале.
    Заказчику важен РЕЗУЛЬТАТ. То что можно быстро сделать и запустить. Зачем писать месяцами и годами с нуля, по хардкору, если можно взять готовое решение и развернуть, но не потому что кто-то не может или не умеет, и даже не в том, популярен jQuery, или нет, просто это быстрее! Вот и всё.
    Вся популярность в скорости. Поэтому зародились CMS, фреймворки, препроцессоры, webpack, Gulp, Git. Именно поэтому развивается NoCode, потому что уже не важно, можешь или нет, проект нужен вчера, и если он работает и делает то что хочет заказчик, по барабану вообще, на Tilda он, на WordPress или на Magento. Да хоть да Друпале или на Джумле. Я раньше тоже бомбил за хардкор, чтобы всё с нуля, свежее и новое, а на деле, тривиальные задачи. Ничего нового! От слова СОВСЕМ.
    Всё что делают компании, это просто копипастят друг у друга, ну UI улучшат, цвет поменяют, более быстрее загружается сайт, или глифы новые. Всё! Мне вообще не мешает jQuery.
    Если надо я и на нём напишу что-нибудь.

    P.S. все средства хороши, если они решают поставленную задачу.
    Ответ написан
    Комментировать
  • Как задать value для CKEditor Yii2?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Например так:
    <?= $form->field($post, 'text')->widget(CKEditor::className(),[
        'editorOptions' => [
            'preset' => 'full',
            'inline' => false, 
        ],
    ])->textarea(['value' => 'Ваш текст value']); ?>

    Но лучше через контроллер передать значение
    $post->text = 'Ваш текст value';
    Ответ написан
    Комментировать
  • С чего начать разработку SIP клиента из браузера? Какой SIP сервер выбрать и как настраивать?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Возможно я вас не правильно понял, но существуют ведь готовые решения, позволяющие звонить, принимать звонки, записывать разговор а потом прослушивать в .mp3
    И это далеко не всё. Естественно данное удовольствие платное и работает через API.
    Bitrix24 например использует Mango Office.
    Если вам нравится как это работает (не с точки зрения функционала CRM а Mango Office), тогда установите на свой сайт.
    Документация доступная и понятная. Есть и другие кто предоставляет такую возможность. Что подходит вам, решать только Вам. Если хотите своё, то изучите curl - без него и близко туда соваться не советую, его на вашем сервере может и не быть. Я столкнулся с этим когда тестировал Stripe и PayPal - через curl оказывается безопасно обмениваться данными. Плюс, вы можете тестировать и запускать это через консоль, что крайне удобно при тестах, а вникать что там за ошибки на странице вылезли, это потом уже, когда с серверной частью разберётесь. Думаю, вам так же будет по хорошему сделать своё API чтобы делать запросы к серверу. Плюс в будущем это свобода для интеграции в мобильные приложения. Успехов.
    Ответ написан
  • Как запретить копировать (сохранять) файлы с сайта?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Лучше всего установить бэкдор. Если заказчик свалит с сайтом без оплаты, то вы сможете откатывать всё до нужной версии, то есть, если заказчик посмотрел и исчез без оплаты, сматывайте проект до той версии, где к примеру неправильные ссылки на скрипты и стили. Кто бы не внёс правки, вы снова откатываете сайт через бэкдор и там нихера не работает.
    Хороший урок для тех кто хочет на халяву получить чужой труд. Проблема копипаста из интернета уже стара как мир, опытные программисты прячут репозиторий от исходного проекта как могут, чтобы после скачивания ничего не отображалось, но есть и те, кто может посмотреть "Sourcer" в инспекторе кода, и благополучно всё скачать. Есть ещё один способ, спасёт только от шоколаты, которая ещё не шарит в этом, программист это обойдёт:
    window.onload = function() {
        document.addEventListener("contextmenu", function(e){
            e.preventDefault();
        }, false);
    document.addEventListener("keydown", function(e) {
        if (e.ctrlKey && e.shiftKey && e.keyCode == 73) {
            disabledEvent(e);
        }
        if (e.ctrlKey && e.shiftKey && e.keyCode == 74) {
            disabledEvent(e);
        }
        if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
            disabledEvent(e);
        }
        if (e.ctrlKey && e.keyCode == 85) {
            disabledEvent(e);
        }
        if (event.keyCode == 123) {
            disabledEvent(e);
        }
    }, false);
        function disabledEvent(e){
            if (e.stopPropagation){
                e.stopPropagation();
            } else if (window.event){
                window.event.cancelBubble = true;
            }
            e.preventDefault();
            return false;
        }
    };

    Не хотите чтобы стащили из интернета, не выкладывайте. Делайте сайты на локальном сервере. Показывайте к примеру через "скайп" или "тимвивер" - последнее подойдёт если заказчик хочет "пощупать" сайт, ну вы поняли. А вообще, если к этому подходить без шуток, делайте себе лицензию, открывайте ИП, заключайте договор с заказчиком, и тогда правда будет на вашей стороне. Выбор конечно за вами. Либо оставаться в пролёте, пытаясь заработать копейки на фрилансе, либо иметь юридическую силу, на тот случай если вас нагло поимели по проекту. С последним конечно движухи лишней больше, но зато деньги всегда есть. Успехов вам.
    Ответ написан
    Комментировать
  • Как сделать случайный цвет у div?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Я думаю, что случайный цвет, это зло, потому как есть люди которым не нравятся определённые цвета, и первое впечатление будет с отвращением и не приязнью. Поэтому советую почитать эту статью https://medium.com/webbdev/%D1%81%D1%80%D0%B5%D0%B... здесь описывается как брать средний цвет картинки, и на его основе делать цвет самого блока. Выглядит весьма интересно и красиво.
    Ответ написан
    1 комментарий
  • Как обратиться к объекту :after элемента Jquery?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Например, так:
    $('p').on('click', function () {
        $(this).attr('data-before','bar');
    });


    p:before {
        content: attr(data-before);
        color: red;
        cursor: pointer;
    }


    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    
    <p>This is a paragraph.</p>
    <p>This is another paragraph.</p>
    Ответ написан
    Комментировать
  • Как отследить событие изменения в input (change почему то не работает)?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Я понял в чём проблема )))
    Вам не поможет здесь никакой change
    Надо обращаться к самой функции bootstrap-slider https://seiyria.com/bootstrap-slider/
    Где ясно дают понять, к какой переменной надо обращаться, чтобы её получить, например

    $('#slider').slider({
        formatter: function(value) {
    
            var x  = value;
            var d  = 0.015;
            var m  = x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // при форматировании числа с запятой 1,000,000
            var one  = x * Number(d); // умножение с нецелыми числами
    
            $('#text').html(x + ' $');
            $('#return').html(one.toFixed().replace(/\B(?=(\d{3})+(?!\d))/g, ",")); // если надо округлить не целое число 4.554849 и вставить запятые как в m
    
            return z;
            
        }
    });


    Как выводить подобное, я думаю вы поняли, а если нет, то:
    <div id="text"></div>
    <div id="return"></div>


    И всё, ничего больше не нужно. )) Успехов вам. ;-)
    Ответ написан
    Комментировать
  • Как сделать плавную прокрутку страницы до якоря?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Такая конструкция подойдёт всем, у кого есть выпадающие меню с ссылкой
    Чтобы не цеплять выпадающие меню и коллапсы, используйте класс или id
    который будет указывать на разрешение скролла
    $("a.youe_class").click(function() { 
    ...
    });


    Такой подход подойдёт, если без разницы, если в ссылке решётка, или там ссылка, просто будет скроллить к нужному блоку с id
    $("a").click(function() { 
    ...
    });


    <p><a href="#top">К началу страницы</a></p>
    <section id="top">
    ...
    </section>


    $(document).ready(function() {
       var margin = 100; // переменная для контроля докрутки
       $("a").click(function() { // тут пишите условия, для всех ссылок или для конкретных
          $("html, body").animate({
             scrollTop: $($(this).attr("href")).offset().top+margin+ "px" // .top+margin - ставьте минус, если хотите увеличить отступ
          }, {
             duration: 1600, // тут можно контролировать скорость
             easing: "swing"
          });
          return false;
       });
    });
    Ответ написан
    Комментировать
  • Кнопка "Показать еще" через Ajax или display: none?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Можно так:
    <script>
    $( 'button' ).click(function() {
      if ( $( "#box" ).is( ":hidden" ) ) {
        $( "#box" ).show( "slow" );
      } else {
        $( "#box" ).slideUp();
      }
    });
    </script>


    <button>показать ещё</button>
    <div id="box">тут картинки</div>


    Если картинки тяжёлые, по мегабайту каждая или более, лучше через:
    else ...
    $( "#box" ).load( "ajax/image.html  #target" );
    ...

    <div id="box">
          <div id="target"></div>
    </div>
    Ответ написан
    Комментировать
  • Откуда ошибка Uncaught TypeError: Cannot read property 'addEventListener' of null?

    Isolution666
    @Isolution666
    Full-Stack Developer
    $(document).ready(function() {
                setInterval(window.onload = function(){
                       ...тут ваш код
                });
            });

    js в конце, перед </body>
    Ответ написан
    1 комментарий
  • Обновление записи по ajax в БД по клику id div блока, как реализовать?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Для тех, кто искал! Этот метод называется .submit()
    <script type="text/javascript">
       $(document).ready(function () {
    	   $("#yellow").click(function() {
    		         $("#act form").submit();
    	   });
       });
    </script>


    Смысл заключается в том, что вы оборачиваете form в id (чтобы скрипт не реагировал на другие формы) и указываете на что должен реагировать скрипт при заполнении формы, можно использовать .change() или .bind() - если через input, и .click() - если хотите передать через span или div.
    Хочу заметить, что с этим заданием хорошо справляется Vue.js

    <div id="act">
            <form action="" method="post" data-ajax="post">
                 <input type="text" id="yellow" name="param">
                 <input type="submit" value="send">
            </form>
       </div>


    Подкрепите это всё ajax , скройте кнопку submit, и форма будет отправлять сразу, как только вы кликнули чекбокс, или выбрали селект, или указали цифру, для других решений лучше это не делать.
    Ответ написан
    Комментировать
  • ERR_ABORTED, font awesome не грузит?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    --
    подключите в :
    <head>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"/>
    </head>

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

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    Если вы хорошо владеете javascript, то предлагаю воспользоваться "Зелёным Шоком"
    Этот фреймворк делает различные сложные анимации, может пригодится во многих интересных и сложных проектах, на ютубе есть много видео о нём, хоть и на английском, но у них полно примеров на codepen, так что - Welcome )))

    https://greensock.com
    Ответ написан
    3 комментария
  • Как сделать private chat между двумя пользователями на php, yii?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, Николай.
    В этой ситуации действительно понадобятся сокеты, я реализовывал подобное на Yii2 через Ajax, используя два параметра, id - пользователя и его токен, токен у каждого пользователя индивидуальный, поэтому с его помощью можно создавать много разных парных диалогов, а потом по этому токену находить диалоги, и выводить на странице. В случае уникальных айдишников и токенов нет риска, что перепутаются миллионы других диалогов, да и с помощью токена можно сортировать переписку так, чтобы последнее сообщение было внизу, и через javascript скролить окно всё время вниз, чтобы пользователь видел что ему написали, без прокрутки вручную.
    Мой метод может быть и костыльный, для кого-то, но я сам его придумал так, до сох пор работает и не подводит. Пробуйте, успехов вам.
    Ответ написан
    Комментировать
  • Как в bootstrap изменить размер экрана при сжатии меню?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Используй @media screenтут подробно изложено как этим пользоваться, так же советую использовать responsinator, если используете OpenServer, то через него тоже можно заняться адаптацией. Советую использовать 4 параметра, как предлагает сам bootstrap

    Очень маленькие устройство
    Телефоны (<768px)

    Малые устройства
    Планшеты (≥768px)

    Средние устройства
    Настольные (≥992px)

    Большие устройства
    Настольные (≥1200px)
    Ответ написан
    Комментировать
  • Как в Yii2 сделать ListView с кастомным фильтром (Ajax/Pjax) и пагинацией?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Ну во первых, надо понимать, что Ajax это технология максимально связана с языком javascript
    Чтобы обновлялась информация по Ajax, нужно создать поле (DOM-дерево), с неким id, которое будет привязано к функции.
    Pjax это лишь вспомогательный класс, инструмент, для манипуляции с контентом, поэтому сети блока с классом Pjax надо раскинуть ровно на столько, на сколько это будет касаться обновления контента. В некоторых случаях мне приходилось захватывать во вью всю страничку экшена, паганацию можно вывести отдельно, вне ListView, и эта технология описана в документации Yii2

    Вот пример рабочего экшена, пусть написано криво, но сообщения отсылаются мгновенно и без перезагрузки страницы, со временем я сделаю этот код более удобным и простым:
    public function actionMessages($id ='', $token ='')
        {
    
            $model = new Message(); // обращаемся к классу привязанному к таблице БД
                if ($model->load(Yii::$app->request->post()) && $model->save()) // убеждаемся что передача данных проходит успешно
                {
                    $model = new Message(); // возвращаем то что обновили
                }    
    
            $send = Message::find()->where(['token' => $token])->orderBy(['id' => SORT_ASC ])->all(); // выводим всю переписку с конкретным пользователем
            $col = Message::find()->where(['token' => $token])->count(); // выводим количество сообщений с конкретным пользователем (например, чтобы скрыть пустой код, если переписки ещё не было)
            $getm = User::find()->where(['id' => $id])->one(); // так мы определим с кем мы переписываемся (имя, аватарка, возраст, что угодно)
            
            return $this->render('messages', ['model' => $model, 'col' => $col, 'send' => $send, 'getm' => $getm, 'id' => $id, 'token' => $token,]); // рендерим всё к чему прикоснулись, чтобы работало.
        }

    Вроде всё понятно, и это всё работает внутри "пиджака", через javascript по конкретному id в блоке div возможно кто-то уже нашёл готовое решение, я лишь делюсь своим скромным опытом.
    Что касается конкретно класса пагинации:
    <?php
    use yii\data\Pagination;
    ?>

    Это класс хорошо работает с классом:
    <?php
    use yii\widgets\LinkPager;
    ?>

    Который надо прописать во вью, и прописать вот такую не хитрую конструкцию:
    <?php echo LinkPager::widget(['pagination' => $pages,]);?>

    Там, где следует отобразить саму пагинацию. Как говорилось выше, надо применить некий id к коду выше, думаю как прописать это в коде - вы знаете, если вдруг фокусы с ListView не прошли.
    Никому не нужны костыли, но если нужно срочно что-то решать, то сойдёт и рабочий код:
    Controller::action /
    $query = Guestbook::find()->where(['level' => 1])->orderBy(['time' => SORT_DESC,]); // создаём конструкцию обращения
            $pages = new Pagination(['totalCount' => $query->count(),'pageSize' => 5]); // обращаемся к классу чтобы сказать сколько записей за раз нужно отобразить, например 5
            $pages->pageSizeParam = false; // отключаем самодеятельность параметров
            $models = $query->offset($pages->offset)->limit($pages->limit)->all(); // теперь зная количество записей и лимиты, мы заставляем скрипт показывать нам ровно столько сколько нам нужно


    На сколько мне известно, теги и айдишко можно прописать и в самом ListView , класс не привередливый, лёгкий и гибкий, решает практически все потребности и капризы заказчиков, почитай о всех возможностях здесь: https://xn--d1acnqm.xn--j1amh/%D0%B7%D0%B0%D0%BF%D... и здесь: www.yiiframework.com/doc-2.0/yii-widgets-linkpager.html думаю это будет приятным чтивом, потому как тут очень много ответов и решений.
    ну и наконец ссылочка, которая лично мне очень помогла: https://nix-tips.ru/examples/simplegridview/index

    Благодарю за внимание.
    Ответ написан
    Комментировать
  • Как сделать чтобы в Input можно было вводить только цифры?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Есть более интересный способ www.yiiframework.com/doc-2.0/yii-widgets-maskedinp... если ваш сайт на фреймворке Yii2, или то что предложил Алексей. Лично я применяю его, и очень доволен, так как маскировать, задавать формат этим способом легко и быстро, в одну строчку, меньше чем за минуту, вот пример того как это работает https://serenitisever.com/contact
    Ответ написан
    Комментировать
  • Есть ли замена iframe?

    Isolution666
    @Isolution666
    Full-Stack Developer
    всё очень просто!
    Надо помнить, что главными в вопросах вёрстки - айдишники, а второстипенные - классы!
    #text {
          color:#000;
    }
    .text {color:#fff;}

    если в блоке есть класс, но стоит айди, то цвет текста будет чёрный а не белый
    <div id="text">
         <div class="text">Здесь сам текст</div>
    </div>


    Есть ещё одна вещь!! С ней не поспорит не один стиль! ))
    .text {color:#0ff !important;}
    Применяем импортант, если хотим увеличить важность стиля, и всё, избавьтесь от iframe как от скверны, фреймы причиняют только вред сайту, к тому же, перед скачиванием Twitter Bootstrap вы можете настроить только те элементы, которые вам нужны, выбрать только то что нужно, в том числе и поменять цвета.

    От себя как от веб-дизайнера скажу, что если ваш сайт содержит серьёзный контент, то нет места разношёрстным стилям, всё должно быть строго и лаконично, минимум 3 цвета, минимум 2 шрифта.

    Размеры тоже должны быть одинаковыми, что у текстов что у заголовков, если текст везде 12pt , то не должно быть страниц с текстом другого размера, внутри текста могут быть: цитата или пояснение какое (чтобы выделить их, поменяйте цвет или размер). Аналогично с заголовками, и они должны быть жирнее и больше. Это не моя прихоть, это для удобства чтения )) Надеюсь помог.
    Ответ написан
  • Как правильно сделать прилипающий к верху и низу компонент?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Ваше решение чётко расписала известная интернет-блоггерша Наталья
    shpargalkablog.ru/2013/09/scroll-block.html

    Читайте и экспериментируйте, у вас всё получится! )))

    Пример: sticky01.blogspot.ru/2013/09/4.html
    Ответ написан
    2 комментария