Держите подразделение активным после отправки формы с помощью localStorage

У меня возникла проблема с сохранением активности подразделения после отправки формы с помощью AJAX. Мой сценарий заключается в том, что у меня есть панель поиска, которая может принимать несколько типов ввода (имя, идентификатор, категория и т. д.). Затем у меня есть панель фильтров, которая в основном представляет собой расширенный поиск, она практически делает то же самое, но имеет больше параметров, таких как отдельные поля для имени, идентификатора, категории, ценового диапазона и т. д. это некоторые важные термины,

  1. ID: ID продукта
  2. Имя: Название продукта
  3. SPL_CD: специальный код, присвоенный каждому продукту
  4. ALT_NM2: Альтернативное имя/описание
  5. costStart/costEnd: поиск диапазона для всех продуктов, себестоимость которых находится в диапазоне
  6. sellStart/sellEnd: поиск диапазона для всех продуктов, цена продажи которых находится в диапазоне
  7. cname: категория продукта
  8. gname: group продукт относится к категории

Меня не волнует CSS, но дело в том, что любой, кто использует эту страницу на стороне клиента, должен видеть значения, вставленные в раскрывающийся список фильтра, т.е. держать раскрывающийся список фильтра видимым даже при перезагрузке страницы. После отправки формы вся моя страница перезагружается. Это делает раскрывающийся список снова скрытым. Я плохо разбираюсь в AJAX, поэтому не знаю, как это сделать, буду признателен за любую помощь.

Это рабочая рабочий пример (не обращайте внимания на отсутствие CSS, так как все в основном определяется в другом файле на основе подхода MVC) — Fiddle Эта рабочий пример также не поддерживает сохранение активного разделения после отправки формы, поэтому я пытаюсь переключиться на AJAX.

Это мой подход AJAX, но он продолжает отображать пустое место вместо таблицы и ее данных.

$("#searchButton").click(function() {
        var params = {
            searchKeyword: $("#searchKeyword").val()
        };
        var form = $("#searchArea");
        var url = form.attr("action")+"?"+$.param(params);
        $.ajax({
            url: url,
            type: "POST",
            dataType: "json",
            colModel:[
                {label:'ProductID', name:'ITM_CD',classes:'ITM_CD', width:40, align:"center", sorttype:"int"},
                {label:'Name', name:'ITM_NM',classes:'ITM_NM',width:100, align:"center", sorttype:"int"},
                {label:'Alt.name', name:'ITM_ALT_NM2',classes:'ITM_ALT_NM2', width:100, align:"center", sorttype:"string"},
                {label:'Special code', name:'SPL_CD',classes:'SPL_CD', width:50, align:"center", sorttype:"int"},
                {label:'Sort Order', name:'SORDER',classes:'SORDER', width:40, align:"center", sorttype:"int"},
                {label:'Talent Points', name:'TPOINTS',classes:'TPOINTS', width:40, align:"center", sorttype:"int"},
                {label:'Selling price', name:'SPRICE',classes:'SPRICE', width:30, align:"right", sorttype:"string"},
                {label:'Cost price', name:'CPRICE',classes:'CPRICE', width:30, align:"right", sorttype:"string"},
                {label: 'Category Name', name:'CNAME', classes: 'CNAME', width: 30, align: "right", sorttype:"string"},
                {label: 'Group name', name:'GNAME', classes: 'GNAME', width: 30, align: "right", sorttype:"string"}
        ],
        });
    });
    $("#searchButton").click(function() {
        var params = {
          searchKeyword: $("#searchKeyword").val(),
            IDKeyword: $("#IDKeyword").val(),
            NMKeyword: $("#NMKeyword").val(),
            NM2Keyword: $("#NM2Keyword").val(),
            SCKeyword: $("#SCKeyword").val(),
            costStartKeyword: $("#costStartKeyword").val(),
            costEndKeyword: $("#costEndKeyword").val(),
            sellStartKeyword: $("#sellStartKeyword").val(),
            sellEndKeyword: $("#sellEndKeyword").val(),
            cnameKeyword: $("#cnameKeyword").val(),
            gnameKeyword: $("#gnameKeyword").val()
        };
        var form = $("#dropDownFilter");
        var url = form.attr("action")+"?"+$.param(params);
        $.ajax({
            url: url,
            type: "POST",
            dataType: "json",
            colModel:[
                {label:'ProductID', name:'ITM_CD',classes:'ITM_CD', width:40, align:"center", sorttype:"int"},
                {label:'Name', name:'ITM_NM',classes:'ITM_NM',width:100, align:"center", sorttype:"int"},
                {label:'Alt.name', name:'ITM_ALT_NM2',classes:'ITM_ALT_NM2', width:100, align:"center", sorttype:"string"},
                {label:'Special code', name:'SPL_CD',classes:'SPL_CD', width:50, align:"center", sorttype:"int"},
                {label:'Sort Order', name:'SORDER',classes:'SORDER', width:40, align:"center", sorttype:"int"},
                {label:'Talent Points', name:'TPOINTS',classes:'TPOINTS', width:40, align:"center", sorttype:"int"},
                {label:'Selling price', name:'SPRICE',classes:'SPRICE', width:30, align:"right", sorttype:"string"},
                {label:'Cost price', name:'CPRICE',classes:'CPRICE', width:30, align:"right", sorttype:"string"},
                {label: 'Category Name', name:'CNAME', classes: 'CNAME', width: 30, align: "right", sorttype:"string"},
                {label: 'Group name', name:'GNAME', classes: 'GNAME', width: 30, align: "right", sorttype:"string"}
        ],
        });
    });
});

HTML и CSS такие же, как у Fiddle.

Редактировать 1: попробовал локальное хранилище

$("#filterSearchButton").on("click", function(){
        localStorage.setItem("style", $("#dropDownFilter").css("display", "none"));
    });
    if (localStorage.getItem("style") === null) {
        localStorage.setItem("style", $("#dropDownFilter").css("display", "flex"));
    } else {
        $("#dropDownFilter").css("display", "flex");
    }
});

Проблема: раскрывающийся список отображается и при первой перезагрузке, этого следует избегать.

Можете попробовать setitem и получить элемент window.localStorage.setItem("PortalLoginApp.userName", username); var userName = window.localStorage.getItem("PortalLoginApp.userName");

Bhavik 28.11.2022 07:05

Он сохранит ваш последний ответ ajax.

Bhavik 28.11.2022 07:07

Я не совсем уверен, как использовать локальное хранилище или хранилище сеансов, не могли бы вы поделиться блоком кода? Между тем, я попробую то, что вы сказали.

retrop5 28.11.2022 07:36

У вас есть какая-либо переменная, которую вы хотите показать после вызова ajax. и тоже нужно использовать эту переменную после перезагрузки страницы?

Bhavik 28.11.2022 07:39

Эй, я попробовал подход localStorage, он работает до некоторой степени. Выпадающий список виден, но я хочу, чтобы он был скрыт при первом открытии страницы, по умолчанию он не остается скрытым при первой перезагрузке.

retrop5 28.11.2022 07:56

Я добавил код для локального хранилища в качестве редактирования самого вопроса.

retrop5 28.11.2022 07:59

У меня есть весь jqGrid для отображения после вызова ajax, но он автоматический, и нет другой переменной, которую я должен показать.

retrop5 28.11.2022 08:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
7
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать localstorage setItem и getItem для хранения последнего ответа ajax.

window.localStorage.setItem("variable", variable);

var getItem = window.localStorage.getItem("variable");

также, когда вы хотите удалить setItem, вы также можете удалить его.

window.localStorage.removeItem('variable');

Можно ли каким-либо образом удалить элемент при первой загрузке страницы?

retrop5 28.11.2022 08:10

Когда ваш проект будет запущен, getitem не будет иметь назначенного значения. после вызова ajax он установит значение в localstorage. поэтому вам просто нужно удалить элемент из локального хранилища, когда вы выполняете какой-либо другой вызов ajax или когда вы возвращаетесь на домашнюю страницу.

Bhavik 28.11.2022 08:14

В моем редактировании 1 я добавил условие, при котором, если разделение не отображается, то есть «отображать: нет», то не показывать стиль разделения, хранящийся в localStorage. Это должно запретить localStorage обрабатывать его содержимое. Если отображается деление, то оно будет отображаться. Это скорее дешевый трюк, если клиенты хотят использовать поиск на основе фильтров, им придется открыть панель фильтров, что означает, что отображение обновляется до гибкого. Это позволит localStorage показать его снова. Но ведет себя не так, как должно. он показывает деление, хотя это первая перезагрузка.

retrop5 28.11.2022 08:28

Кроме того, я использую jqGrid без AJAX, потому что я обнаружил, что параметры и ограничения не были определены в формате AJAX, а их переделка займет много времени.

retrop5 28.11.2022 08:30

Я также обновил код в файле скрипки, пожалуйста, проверьте.

retrop5 28.11.2022 08:40

Как упомянул @bhavik, я попробовал подход с использованием localStorage, и он сработал, чтобы сделать то же самое, избегая открытия разделения при перезагрузке страницы, я просто изменил способ отправки формы. вместо оператора if я просто сказал:

$(document).on("click", "#report tr", function(){
        parent.onSearched($("#report").getRowData($(this).attr("value")));
});

Другие вопросы по теме