Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Скрыть результат аякс запроса (https://javascript.ru/forum/events/83405-skryt-rezultat-ayaks-zaprosa.html)

ureech 30.11.2021 22:14

Скрыть результат аякс запроса
 
Привет.
<input onclick="SelectCtype(this)" name="ctype-check" value="id" type="checkbox" />
<div id="id"><label>Text</label></div>


function SelectCtype(e) {

    var inp = document.querySelector("input[name='ctype-check']:checked");
    var container = document.getElementById(inp.value);
    var div = document.createElement("div");
    div.className = 'custom-control custom-checkbox mb-1';
    var lab = document.createElement("label");
    lab.className = 'field-label';
    div.appendChild(lab);
    container.appendChild(div);

    if ($(e).is(':checked')){
 
    $.ajax({
        type: 'POST',
        url: '',
        data: {
            'ctype_id': e.value
        },
        success: function (data) {
            var obj = JSON.parse(data);
            $('.field-label').html(obj);

        }
    });
}else{
    
    alert()
}
}

Если снимаю галочку с чекбокса,нужно скрыть результат аякса. А так у меня даже alert() не работает. Help!

voraa 30.11.2021 23:06

И ни одного сообщения в консоле?

При первом клике галочка появится.
При втором клике галочка уберется и inp будет null

ureech 01.12.2021 06:26

Всё так и есть.inp null, а реакции никакой. В консоле показывает, красным,что inp null)

ureech 01.12.2021 06:43

Я подозреваю,что у меня проблемы с выводом аякса. У меня чекбоксов
<input onclick="SelectCtype(this)" name="ctype-check" value="id" type="checkbox" />
<div id="id"><label>Text</label></div>

несколько. Это список категорий. Мне надо, что бы при выборе одной открывались её подкатегории. А у меня,если я кликаю на первой, выводит под ней,как и надо,но потом,если кликаю по второй, выводит под первой в двух экземплярах. Получается создаётся блок для вывода не под тем,гле я кликнул, о там,,где :checked

voraa 01.12.2021 06:59

Цитата:

Сообщение от ureech
<input onclick="SelectCtype(this)" name="ctype-check" value="id" type="checkbox" />

Цитата:

Сообщение от ureech
А у меня,если я кликаю на первой, выводит под ней,как и надо,но потом,если кликаю по второй, выводит под первой в двух экземплярах.

Если везде name="ctype-check", то всегда будет находить первый отмеченный
Если отмеченных нет, то всегда будет inp = null

Зачем вообще
var inp = document.querySelector("input[name='ctype-check']:checked");

У вас же e - тот input, по которому кликнули.
Ну и проверяйте сразу
if (e.checked) {
// показываем
} else {
// скрываем
}

ureech 01.12.2021 07:49

Разобрался. Немного переделал. Не стал мудрить с созданием блоков.
<input onchange="SelectCtype(id,id_in)" name="ctype-check" value="1" id="id" type="checkbox" />
<div id=""><label>Text</label></div>
<div id = id_in" style = "display: none;"></div>


function SelectCtype(id,div_id) {

inp = document.getElementById(id);
div = document.getElementById(div_id);
if (inp.checked){
...
success: function (data) {
..
div.style.display = "block";
}
..

}else{
div.style.display = "none";
}

}

ureech 01.12.2021 08:56

Теперь другая проблема. Подкатегории открываются только если кликаю на категории по убывающей. То есть снизу вверх. Сверху вниз, через раз.

ureech 01.12.2021 09:12

Но это наверное вопрос к серверу. Буду там смотреть

voraa 01.12.2021 09:16

Приведите код, где у Вас несколько таких инпутов
и весь код скрипта, где они появляются/скрываются.

ureech 01.12.2021 09:41

Попробую.

voraa 01.12.2021 09:47

А чего тут пробовать?
Просто код с последвательностью инпутов
и код SelectCtype

ureech 01.12.2021 10:07

Отключил в коде аякс запрос и выводил просто текст.Всё работает корректно. Не знаю что в аяксе не так. Но ошибка точно на стороне клиента. Так как клик по чекбоксу не срабатывает вниз по дереву.
Вот код

voraa 01.12.2021 10:21

А как это должно работать в том коде, который вы привели?
$.ajax({
        type: 'POST',
        url: '',
        data: {
            'ctype_id': id
        },
        success: function (data) {
            if (typeof data === "string" && data !== null) {
            var obj = JSON.parse(data); 
            div.style.display = "block";          
            $(div).html(obj);   
            }       
        }
    });

url: ''
Как вы вообще собираетесь посылать запрос к своему серверу из jsfiddle.net/?

ureech 01.12.2021 10:41

Никак.Вы просили код с последвательностью инпутов. А тут сполера не нашёл. Вот и выложил там

voraa 01.12.2021 10:51

Цитата:

Сообщение от ureech
Отключил в коде аякс запрос и выводил просто текст.Всё работает корректно.

Значит надо смотреть, что сервер возвращает, срабатывает ли success: вообще

ureech 01.12.2021 10:58

Нет. Дело в том, что при клике на чекбокс вниз по списку запрос не уходит вообще.

ureech 01.12.2021 11:03

Методом исключения выяснид, что дело в этой строке
$(div).html(JSON.parse(data));
Если её коментирую,то запросы отправляются(и возвращаются) и вверх и вниз

ureech 01.12.2021 11:22

Сделал так
if (inp.checked){
    div.style.display = "block";   
}else{
    
    div.style.display = "none";
}

    $.ajax({
        type: 'POST',
        url: '',
        dataType:'json',
        data: {
            'ctype_id': id
        },
        success: function (data) {                            
            $(div).html(data);                  
        }
    });

Теперь запросы уходят и приходт,но вниз не выводятся)

ureech 01.12.2021 12:51

Нашёл закономерность. Скорее всего дело в id. У меня 8 категорий.До пятой,она имеет id=9 всё работает и вверх и внз. Но только с 1-ой по 5-тую. И тоже самое с 6-ой по восьмую. Там id начинается с 10.

ureech 01.12.2021 13:23

Поменял айдишники с цифровых на буквенно-цифровые и всё заработало.


Часовой пояс GMT +3, время: 05:18.