Html Неограниченный ввод иерархии для формирования

Я хочу добавить форму для добавления новых категорий. Категории могут иметь бесконечные подкатегории.

$(document).ready(function () {
    var max_fields = 15; //maximum input boxes allowed
    var wrapper = $(".input_fields_wrap"); //Fields wrapper
    var add_button = $(".add_field_button"); //Add button ID

    var x = 1; //initlal text box count
    $(add_button).click(function (e) { //on add input button click
        e.preventDefault();
        if (x < max_fields) { //max input box allowed
            x++; //text box increment
            $(wrapper).append('<div class = "input_fields_wrap_sec"><input type = "text" name = "mytext[]" placeholder = "Sub-Category title"/>\n\
                                <input type = "submit" name = "submit1" value = "Add Sub-Sub-Category" class = "add_field_button" >\n\
                                <a href = "#" class = "remove_field">Remove</a></div>'
                    ); //add input box
        }
    });

    $(wrapper).on("click", ".remove_field", function (e) { //user click on remove text
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    });
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action = "" method = "POST">
   <div class = "input_fields_wrap">
      <p>Please enter the Category Title</p>
      <input type = "text" name = "mytext[]" placeholder = "Category title">
      <input type = "submit" name = "submit1" value = "Add Sub-Category" class = "add_field_button" >
   </div>
   <input type = "submit" name = "submit" value = "submit">
</form>

Теперь у меня есть такая форма, как это, и когда я нажимаю «добавить подкатегорию», должен появиться новый ввод «подкатегория» с кнопками: «добавить подкатегорию» и «удалить»

Должно быть как это, глубина категорий бесконечна

что ты уже испробовал? Вы зациклились на чем-то конкретном?

sjahan 07.06.2018 10:30

Я попытался добавить поле и кнопки «подкатегории», и эта подкатегория могла иметь свои собственные подкатегории. Но когда я пытаюсь нажать кнопку добавления подкатегории, страница перезагружается. Я не знаю, как мне написать в js, чтобы создать категорию, которая может иметь свою подкатегорию, у которой могут быть свои собственные подкатегории и т. д.

vika 07.06.2018 10:39

Проблема в том, что когда вы вызываете $(add_button).click, вы присоединяете слушателя к существующие кнопки. Затем вы создаете несколько новых кнопок, но к ним не прикреплен этот слушатель;) Итак, когда вы нажимаете на них, они отправляют вашу форму, и это перезагружает страницу! На вашем месте я бы использовал type=button для своих кнопок и onclick = "addSubCategory()", где addSubCatogery был бы вашим слушателем;) Надеюсь, это поможет!

sjahan 07.06.2018 10:45

вместо submit используйте button

David Jaw Hpan 07.06.2018 10:50

Я думаю, что последняя кнопка должна иметь тип submit, а внутренние - нет. Тогда preventDefault также будет ненужным.

schwaber 07.06.2018 11:05

Ачиу! Спасибо, что приняли мой ответ. Пожалуйста, проверьте мою новую улучшенную скрипку на предмет улучшенной функциональности - предполагая, что вы, возможно, захотите отправить иерархию на сервер или что-то подобное.

schwaber 07.06.2018 12:33
Поведение ключевого слова "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) для оценки ваших знаний,...
0
6
316
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Лабас!

Вы можете попробовать что-то вроде этого:

function getValueText(level) {

  let i = 0
  let text = "Add ";
  while (i < level) {
    text += "sub-"
    i++;
  }

  return text + "category";
}

function appendInnerCategory(level, element) {
  var myDiv = document.createElement("div");
  myDiv.className = "level-" + level
  var btn = document.createElement("input");
  btn.type = "button";
  btn.value = getValueText(level);
  btn.addEventListener("click", function(event) {
    appendInnerCategory(level + 1, event.target.parentNode);
  });
  var textBox = document.createElement("input");
  textBox.type = "text";
  myDiv.appendChild(textBox);
  myDiv.appendChild(btn);
  element.appendChild(myDiv);
}

appendInnerCategory(0, document.querySelector('.wrapper'));

HTML:

<div class = "wrapper"></div>

Рабочий пример: http://jsfiddle.net/7L382gow/

Обновлен скрипт для поддержки объекта структуры при манипулировании DOM.

Submit выведет полученную иерархию на консоль.

http://jsfiddle.net/bqk6pmjg/

Это совершенно потрясающе. Обратите внимание, я получаю консольную ошибку из кода скрипки. Он утверждает, что не может загрузить jsfiddle.net/js/createStream.js.map. Хотя на выходе я получаю правильно сформированный объект json.

hepcat72 21.06.2021 17:26

Я проработал проблемы до такой степени, что консоль как в jsfiddle, так и в консоли в моем экземпляре django выдает именно то, что я хочу, но форма никогда не отправляет результаты. У меня есть проверка работоспособности в моей функции form_valid, которая должна выводить простую строку в консоль, когда вы нажимаете кнопку «Отправить», но ничего не выходит и ошибок нет ... Что еще мне нужно для отправки данных на сервер? Вот мой мод / форк jsfiddle вашего кода (проверка концепции перед переходом на django) ... jsfiddle.net/hepcat72/d42k38j1/18

hepcat72 24.06.2021 01:23

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