Задать вопрос
Ответы пользователя по тегу Веб-разработка
  • SVG: как поменять картинку программно, вложенную в svg файл?

    @kudis
    Bitrix developer
    Если ваше приложение работает в браузере, то файл на сервере вы точно не поменяете средствами javascript
    Тут нужен серверный бэкэнд.
    Ответ написан
  • Как правильно сделать ajax запрос?

    @kudis
    Bitrix developer
    Что, точно, нужно сделать:
    1. Всем чекбоксам дать один класс, например js-checkbox
    2. Присвоить каждому чекбоксу name
    3. Если name не уникальна между групп, то ввести data-атрибут с названием группы
    4. Установить период ожидания между запросами

    т.е. каждый чекбокс будет выглядеть так:
    <input class="js-checkbox" type="checkbox" id="<Уникальный ID>" name="<Название свойства>" data-type="<Название группы>" value="true" />
    <label for="<Уникальный ID чекбокса>">Лэйбл</label>

    например:
    <input class="js-checkbox" type="checkbox" id="check_atlas_concore" name="atlas_concore" data-type="ArrayCheck" value="true" />
    <label for="check_atlas_concore">Atlas Concore</label>

    тогда всё будет работать так:
    var timer = null;
    
    function pushData()
    {
        var data = {};
        var checkedBoxes = $('.js-checkbox:checked');
        var checkedBoxesQ = checkedBoxes.length;
    
        checkedBoxes.each(function(){
            var item = {};
            item[this.name] = true;
            data[$(this).data('type')] = item;
    
            if (!--checkedBoxesQ) {
                $.ajax({
                    type: 'POST',
                    url: '',
                    data: data,
                    success: function(msg) {
                    }
                });
            }
        });
    }
    
    
    $('.js-checkbox').on('change', function(){
        clearTimeout(timer);
        timer = setTimeout(pushData, 1000);
    });


    но, лучше всего обернуть весь фильтр в форму, например с id myFilter
    а в name каждого чекбокса включить название группы
    например:
    <input class="js-checkbox" type="checkbox" id="check_atlas_concore" name="ArrayCheck[atlas_concore]" value="true" />
    <label for="check_atlas_concore">Atlas Concore</label>


    тогда pushData будет выглядеть ещё лаконичнее:
    function pushData()
    {
        $.ajax({
            type: 'POST',
            url: '',
            data: $('#myFilter').serialize(),
            success: function(msg) {
            }
        });
    }
    Ответ написан
    1 комментарий