Ответы пользователя по тегу JavaScript
  • Заставить ajax работать синхронно?

    @serega_kaktus
    Программист-самоучка, фрилансер
    тут варианта 2 - написать свой js движок, в котором ajax будет синхронный, продвинуть этот движок во все браузеры, параллельно поправить стандарты ActionScript. До даже тогда ваш говнокод не заработает, потому что надо хотя бы какое-то значение возвращать из функции checkTranslit.
    Ну или можно просто запомнить одно простое правило - если нужно выполнить какое-то действие после завершения ajax запроса, то это действие должно выполнятся в success колбэке.
    Перепишите код
    //валидатор
    checkTranslit($('#translit').val());
        
    
    //запрос 
    function checkTranslit(translit){
        $.ajax({
            url: 'http://site.com/scripts/checkTranslit.php',
            data: {'translit': translit},
            type: 'POST',
            dataType: 'json',
            async: false,
            success: function(data){
              if (!answer.result) {
                errorArray.push("translit");//кладем поле в массив с ошибками
                console.log('value is: ' + $('#translit').val());
                console.log('result is: ' + answer.result);
              } 
            },
            error: function(error){
               console.log('error is: ' + error + '\n');  
                return error;
            }
        });
    
    }

    Если у вас dataType: json, зачем вы какие-то манипуляции с ними в колбэках проводите? Скрипт на сервере должен возвращать json, а в колбэке уже будет десерализованный объект
    Ответ написан
    Комментировать
  • Как реализовать уведомления?

    @serega_kaktus
    Программист-самоучка, фрилансер
    ajax запрос раз в 2 секунды, количество записей считается при каждом запросе. Сервер грузить не будет.
    Ответ написан
  • Какие задачи должен уметь решать web разработчик?

    @serega_kaktus
    Программист-самоучка, фрилансер
    Разработчик должен уметь решать все адекватные и не очень адекватные задачи, которые ставит заказчик. Не зацикливайтесь на умении решать какую-то конкретную задачу. Вы не должны уметь создавать поисковую систему или систему бронирования. Что от них толку, если поисковая система чаще всего строится на готовых компонентах, а вероятность, что следующий ваш проект будет система бронирования - примерно 1 из 100.
    Разработчик должен уметь создавать систему, которая будет решать поставленную задачу, и которая имеет запас для расширения, чтобы маленькое дополнение от заказчика не заставило делать все с нуля. Должны знать ООП в идеале, так как сейчас это используется почти везде. Должны знать, что такое REST, SOAP, XML, JSON, HTTP, должны уметь настроить web-server так, чтобы сайт работал и можно было заняться разработкой (настройка продакшна, установка какого-то специализированного софта - уже задача админа). Нужно знать, какие технологии/библиотеки существуют и где применяются, чтобы случайно не писать одностраничное web-приложение на jQuery.
    Изучать досконально какие-то технологии, решать конкретные задачи просто так практически не имеет смысла. Никогда не знаешь, какой проект будет следующим и пригодятся ли эти знания.
    Ответ написан
    1 комментарий
  • Как правильно сделать условие для цикла в данной ситуации на Javascript?

    @serega_kaktus
    Программист-самоучка, фрилансер
    Зачем такой код
    if(arr[i][j] == "X" && arr[i+1][j] == "X" && arr[i+2][j] == "X")
    во вложенном цикле? Зачем прибавлять константы, если есть переменная i?
    // Проход по горизонтали
    // Проход по вертикали такой же, только во вложенном цикле поменяйте местами i и j в условии
    for(var i = 0; i < arr.length; i+=1){
      countet = 0;
       for(var j = 0; j < arr.length; j+=1){
         var last_counter = counter;
         if (arr[i][j] == 'X') {
            counter++
         }
         else {
           counter = 0;
         }
         // здесь можем сделать нужные вычисления с counter и last_counter. Например, найти максимально длинную последовательность
       }
    }
    // По диагонали
    var counter = 0;
    for (var i = 0; i < arr.length; i++) {
      var last_counter = counter;
       if (arr[i][i] == 'X') {
          counter++
       }
       else {
         counter = 0;
       }
       // здесь можем сделать нужные вычисления с counter и last_counter. Например, найти максимально длинную последовательность
    }


    PS цИкл, диагонАль, ',,,,'
    Ответ написан
    1 комментарий
  • Как сделать, чтобы при повторном нажатии тумблер возвращался в первоначальное положение?

    @serega_kaktus
    Программист-самоучка, фрилансер
    $(document).ready(function(){
    	var toggle1 = $(".toggler");
    	var left = $(".left");
    	var circle = $(".circle");
        var disabled = true;
    	toggle1.click(function(){
            if (disabled) {
    		    circle.animate(
    		    {
    			    marginLeft: '26px',
    		    }, 120);
    		    left.animate(
    		    {
    			    width: '34px',
    		    }, 120);
            }
            else {
                circle.animate(
    		    {
    			    marginLeft: '2px',
    		    }, 120);
    		    left.animate(
    		    {
    			    width: '10px',
    		    }, 120);
            }
            disabled = !disabled;
    	});
    });
    Ответ написан
  • Построение дерева из массива js?

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

    @serega_kaktus
    Программист-самоучка, фрилансер
    В JS нет ассоциативных массивов, как в PHP, для этого используются объекты
    Ответ написан
    Комментировать
  • Как создать новый массив из другого массива, элементы которого представлены объектами?

    @serega_kaktus
    Программист-самоучка, фрилансер
    1. Почему так происходит?

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

    например, тут пишут, как клонировать объект. Думаю, сможете применить к циклу
    Ответ написан
    1 комментарий
  • Почему не работает объект?

    @serega_kaktus
    Программист-самоучка, фрилансер
    function Counter(start){
      var that = this;
    
        this.value = start;
    
        this.Up = function()
        {
            that.value++;
            that.ShowText();
            console.log(that.value);
        };
    
        this.Down = function()
        {
            that.value--;
            that.ShowText;
            console.log(that.value);
        };
    
        this.ShowText = function()
        {
            $('.box').text(this.value);
        };
    
        this.Render = function()
        {
            $('#counter-minus').click(this.Down);
            $('#counter-plus').click(this.Up);
        }
    }
    
    counter = new Counter(2);
    counter.Render();

    jQuery выполняет обработчик события в контексте того элемента, на который этот обработчик был навешан. Короче говоря, в методах Up и Down this - это не ваш объект, а объект DOM.

    А вообще не устанавливайте методы "класса" как обработчик события, лучше создайте анонимную функция и в ней вызовите нужный метод. Так избежите проблем.
    И используйте прототипирование, а то ваше ООП бесполезно, наследование работать не будет
    Ответ написан
    2 комментария
  • Как сократить код для селектов?

    @serega_kaktus
    Программист-самоучка, фрилансер
    Переписать функцию вот так и передавать id селекта как параметр не пробовали?
    function sumprice(id){
    		var calculate = 0;
    		var sum_main = document.getElementById("sum_main");
    		var maker = document.getElementById(id);
    		var pricem = maker.options[maker.selectedIndex].getAttribute("data-price");
    		var cpu1 = document.getElementById("kol_cpu").value;
    		calculate = cpu1*pricem;
    		var result = document.getElementById("price_cpu");
        	result.value = calculate;
        	document.getElementById('sum_main').innerHTML = result.value;
    	}
    Ответ написан
  • Как можно инициализировать плагин к элементу, который создан через append() ???

    @serega_kaktus
    Программист-самоучка, фрилансер
    У вас точно такая же ошибка, как в прошлом вопросе.
    Поймите, что при
    $('selector').anyJqueryMethodOrPlugin()
    jQuery будет искать только те элементы, которые есть на странице сейчас. jQuery не знает, что и когда будет добавлено в коде ниже.
    А когда вы добавляете элемент, этот код не будет исполнен повторно (если вы его не вызовите специально).
    Это относится ко всем методам/плагинам и т.п.
    Если есть какой-то код, который производит инициализацию на странице (добавляет обработчики, включает плагины), то оберните этот код в функцию и вызывайте каждый раз, когда создали новый элемент. Только избегайте повторных вызовов на одних и тех же элементах
    Ответ написан
    Комментировать
  • Вопрос про метод each?

    @serega_kaktus
    Программист-самоучка, фрилансер
    Так если вы точно уверены, что из базы всегда выбирается только одна запись (поиск по ключу, например), тогда стоит переписать php код
    $row = mysql_fetch_array($result, MYSQL_ASSOC))
    echo json_encode(array("client_date" => $row));

    Тогда в js коде будет проще обращаться с свойствам объекта
    $('#changeClientDataForm')[0].reset();
    $('#changeClientDataForm .code').val(json.client_date.code_client);
    $('#changeClientDataForm .name').val(json.client_date.name);
    $('#changeClientDataForm .login').val(json.client_date.login);
    $('#changeClientDataForm .password').val(json.client_date.password);


    PS А вы пароль в открытом виде в БД храните?
    Ответ написан
    Комментировать
  • Как правильно преобразовать JSON в HTML?

    @serega_kaktus
    Программист-самоучка, фрилансер
    можно еще тут поиском воспользоваться Как грамотно и быстро превратить Json строку в HTML структуру?
    Ответ написан
    Комментировать
  • Jquery. Как удалить созданый ранее input?

    @serega_kaktus
    Программист-самоучка, фрилансер
    Сначала всем кнопкам задай общий класс (пусть будет 'service-button'). Затем нужно как-то создать отображение кнопка->имя сервиса. Например, добавить каждой кнопке аттрибут data-service-name="My service name"
    $('.service-button').click(function(){
      var serviceName = $(this).attr('data-service-name');
      if ($('.headerOrder input[name=serviceName]').length === 0) {
        $('.headerOrder').append('<input type="hidden" name="serviceName" value="" />');
      }
      $('.headerOrder input[name=serviceName]').val(serviceName);
    });


    А еще лучше добавить поле serviceName еще на стороне сервера, так как html не должен строиться на стороне клиента без необходимости. Тогда и условие в обработчике не нужно будет, так поле точно существует.
    Ответ написан
    1 комментарий
  • Возможно ли сделать фильтрацию по нумберным значениям?

    @serega_kaktus
    Программист-самоучка, фрилансер
    Ответ написан
    Комментировать
  • Как отменить прокрутку страницы наверх при клике по пустой ссылке?

    @serega_kaktus
    Программист-самоучка, фрилансер
    вместо ссылок используйте span с сss cursor:pointer;
    Ответ написан
  • Как исправить неверное определение координат элемента draggable после перетаскивания?

    @serega_kaktus
    Программист-самоучка, фрилансер
    Зачем вы лишние манипуляции делаете, stop выполняется в области видимости перемещаемого объекта и доступен как this
    $(document).ready(function(){ 
      $(".rD").draggable({
                stop: function(event, ui) { 
              alert("top:" + $(this).offset().top + ", left: " + $(this).offset().left);
            }
    });
    Ответ написан
  • Как показать/скрыть div по клику. Скрыть по клику в любое место?

    @serega_kaktus
    Программист-самоучка, фрилансер
    <script type="text/javascript">
    document.body.onclick = function(event) {
      var objs = document.getElementsByClassName('block_class'); 
    for (var i; i < objs.length; i++) {
     //Если css-свойство display block и кликнули не по ссылке, по которой должен открыться блок, то: 
     if (objs[i].style.display == "block" && objs[i].attributes['data-block-id'] != event.target.attributes['data-block-id']) { 
       objs[i].style.display = "none"; //Скрываем элемент
      }
    }
    function showHide(element_id) {
                    //Если элемент с id-шником element_id существует
                    if (document.getElementById(element_id)) { 
                        //Записываем ссылку на элемент в переменную obj
                        var obj = document.getElementById(element_id); 
                        //Если css-свойство display не block, то: 
                        if (obj.style.display != "block") { 
                            obj.style.display = "block"; //Показываем элемент
                        }
                        else obj.style.display = "none"; //Скрываем элемент
                    }
                    //Если элемент с id-шником element_id не найден, то выводим сообщение
                    else alert("Элемент с id: " + element_id + " не найден!"); 
                }

    ссылка теперь в таком формате
    <a href="javascript:void(0)" onclick="showHide('block_id')" data-block-id="block_id">Open_block</a></li>

    Аттрибут data-block-id так и пишется, на конкретный id не заменяется. Все скрываемые блоки должны иметь общий класс block_class
    Ответ написан
  • Почему алгоритм работает некорректно?

    @serega_kaktus
    Программист-самоучка, фрилансер
    var arr, max_number, i, unic;
    arr = [];
    max_number = 42;
    while (arr.length < 42) {
      do {
        unic = true;
        a = Math.floor(Math.random() * 42);
        for (i = 0; i < arr.length; i++) {
          if (a == arr[i]) {
            unic = false;
            break;
          }
        }
      } while (!unic);
      arr.push(a);
    }

    Вы сначала находили в цикле do уникальное значение, а потом присвоили переменной a новое значение после цикла.
    Ответ написан
    Комментировать
  • Обработка и вставка json данных?

    @serega_kaktus
    Программист-самоучка, фрилансер
    for (var i = 0; i < json.length; i++) {
        var data = "some data" //может быть текст или html
        $('#' + json[i].week_num_return).append(data);
    
    }
    


    Тут очень хорошие доки на русском jQuery
    Ответ написан
    Комментировать