Рекурсивный объект Jquery с данными

#jquery #recursion

#jquery #рекурсия

Вопрос:

Я пытаюсь создать рекурсивные данные в объекте Jquery. Я почти полностью открыл форму внутри всплывающего окна, получая данные и сохраняя их в объекте jquery, но столкнулся с проблемой в подвопросе внутри опции, которая дублирует основной вопрос. его опция добавления внутри вопроса правильно, но я добавляю дополнительный вопрос с той же функцией, просто получая родительский идентификатор, но его добавление дополнительного вопроса дважды дублирует основной вопрос

 var ParentIndex = 0;
var QuestionIndex = 0;
var OptionIndex = 0;
var Question = [];
var Model = null;

$(function(){
    // Create Question
    var ParentIDX = parseInt($('[data-type=OQ]').attr('data-parent'));
    ParentIDX = isNaN(ParentIDX) ? 0 : ParentIDX;

    // Create Question
    CreateQuestion('[data-type=OQ]',ParentIDX);

    // Remove Question
    $('body').on('click','a[data-type=RQ]',function(){
        var Parent = parseInt($(this).attr('data-parent'));
        delete Question[Index];
        $('[data-type=QRow][data-index=' Index ']').remove();
    });
    // Remove Options
    // Remove Question
    /*
    $('body').on('click','a[data-type=RO]',function(){
        var Index = parseInt($(this).attr('data-index'));
        delete Question[Index];
        $('[data-type=QRow][data-index=' Index ']').remove();
    });
    */

});

function CreateQuestion(Trigger,Parent){
    Model = $(Trigger).avgrund({
     height: 500,
     holderClass: 'custom',
     closeByEscape: true,
     closeByDocument: true,
     showClose: true,
     showCloseText: 'x',
     onBlurContainer: '.container-scroller',
     template: '<form name="AddQuestion"> <div class="row"> <div class="col-sm-12"> <div class="form-group"><label>Title</label><input type="text" class="form-control" name="Title"/></div></div><div class="col-sm-12"> <div class="form-group"><label>Role</label><select name="Role" class="form-control">' (Roles) '</select></div></div><div class="col-sm-6"> <div class="form-group"> <label>Weight</label> <div class="input-group"><input class="form-control" placeholder="Weight" name="Weight" type="text"/><span class="input-group-append"><a class="btn btn-info text-white">%</a></span></div></div></div><div class="col-sm-6"><label>amp;nbsp;</label><div class="form-check form-check-flat mt-0"><input name="NotNA" type="checkbox" class="form-check-input"/> N/A</div> </div><div class="col-sm-12"> <div class="form-group"><a href="javascript:;" class="btn btn-success col-12" data-type="ADQ" data-index="' QuestionIndex '" data-parent="' Parent '"><i class="fa fa-plus"></i> Add Question </a></div></div></div></form>'
   });

  $('body').on('click','a[data-type=ADQ]',function(){
     var Data = {
         'Question' : $('input[name=Title]').val(),
         'Role' : $('select[name=Role]').val(),
         'Weight' : $('input[name=Weight]').val(),
         'NotNa' : $('input[name=NotNA]').prop("checked") ? 1 : 0,
         'Options' : [],
         'Parent' : $(this).attr('data-parent')
     }
     // Pushing Data to Object
     Question.push(Data);
     // Increasing Index
     QuestionIndex  ;
     // Appending Question
     if(parseInt(Question[Question.length - 1].Parent) == 0){
         // Finding Entry Index
         var Index = parseInt(Question.length - 1);
         // Defining Title
         var QuestionTitle = Question[Question.length - 1].Question;
         // HTML
         var HTML = '<div class="mb-3" data-type="QRow" data-index="' Index '"><div class="card border-success rounded"> <div class="card-header"> <div class="row"> <div class="col-sm-8 pt-1">' QuestionTitle '</div><div class="col-sm-4 text-right"> <a href="javascript:;" class="btn btn-info mr-1" data-type="OPO" data-parent="' Index '"><i class="fa fa-plus"></i> Add Option</a><a  href="javascript:;" class="btn btn-danger" data-type="RQ" data-index="' Index '"><i class="fa fa-close"></i></a></div></div></div><div class="card-body bg-light" data-type="OUNQ" data-parent="' Index '"></div></div></div>'
         // Append Question
        $('[data-type=Questions]').append(HTML);
        $('.avgrund-close').click();
        // Create Option
        CreateOption('[data-type=OPO]',Index);
    } else {
        var Index = parseInt(Question.length - 1);
        // Defining Title
        var QuestionTitle = Question[Question.length - 1].Question;
        // HTML
        var HTML = '<div class="mb-3" data-type="QRow" data-index="' Index '"><div class="card border-success rounded"> <div class="card-header"> <div class="row"> <div class="col-sm-8 pt-1">' QuestionTitle '</div><div class="col-sm-4 text-right"> <a href="javascript:;" class="btn btn-info mr-1" data-type="OPO" data-parent="' Index '"><i class="fa fa-plus"></i> Add Option</a><a  href="javascript:;" class="btn btn-danger" data-type="RQ" data-index="' Index '"><i class="fa fa-close"></i></a></div></div></div><div class="card-body bg-light" data-type="OUNQ" data-parent="' Index '"></div></div></div>'
        // Append Question
       $('[data-type=QUNO][data-parent=' Parent ']').append(HTML);
       $('.avgrund-close').click();
       // Create Option
       CreateOption('[data-type=OPO]',Index);
   }
  });
}

function CreateOption(Trigger,Parent){

    Model = $(Trigger).avgrund({
     height: 500,
     holderClass: 'custom',
     closeByEscape: true,
     closeByDocument: true,
     showClose: true,
     showCloseText: 'x',
     onBlurContainer: '.container-scroller',
     template: '<form name="AddOption"><div class="row"><div class="col-sm-12"><div class="form-group"><label>Name</label><input type="text" class="form-control" name="Name"></div></div><div class="col-sm-12"><div class="form-group"><label>Type</label><select name="Type" class="form-control"><option value="checkbox">Checkbox</option><option value="radio">Radio</option></select></div></div><div class="col-sm-6"><div class="form-group"><label>Effect</label><input type="text" class="form-control" name="Effect"></div></div><div class="col-sm-6"><div class="form-group"><label>Point</label><input type="text" class="form-control" name="Point"></div></div><div class="col-sm-12"><div class="form-check form-check-flat mt-0"><input name="FatalError" type="checkbox" class="form-check-input"> FatalError</div></div><div class="col-sm-12"><div class="form-group"><a href="javascript:;" class="btn btn-success col-12" data-type="ADO" data-index="' OptionIndex '" data-parent="' Parent '"><i class="fa fa-plus"></i> Add Option </a></div></div></div></form>'
   });

   $('body').on('click','a[data-type=ADO]',function(){
        var Data = {
            'Option' : $('input[name=Name]').val(),
            'Type' : $('select[name=Type]').val(),
            'Effect' : $('input[name=Effect]').val(),
            'Point' : $('input[name=Point]').val(),
            'FatalError' : $('input[name=FatalError]').prop("checked") ? 1 : 0,
            'Parent' : $(this).attr('data-parent')
        }

        // Pushing Data to Object
        var Options = Question[Parent].Options;
        Options.push(Data);
        // Increasing Index
        OptionIndex  ;
        // Appending Option
        var Index = parseInt(Options.length - 1);
        var Name = Options[Index].Option;
        // Creating Option HTML
        var HTML = '<div class="mb-3" data-type="ORow" data-index="' Index '"> <div class="card border-success rounded"> <div class="card-header"> <div class="row"> <div class="col-sm-8 pt-1">' Name '</div> <div class="col-sm-4 text-right"> <a href="javascript:;" class="btn btn-success mr-1" data-type="OQ" data-parent="' Index '"><i class="fa fa-plus"></i> Add Question</a><a href="javascript:;" class="btn btn-danger" data-type="RO" data-index="' Index '" data-parent="' Parent '"><i class="fa fa-close"></i></a></div> </div> </div> <div class="card-body bg-light" data-type="QUNO" data-parent="' Index '"></div> </div></div>'
        // Append Question
       $('[data-type=OUNQ][data-parent=' Parent ']').append(HTML);
       $('.avgrund-close').click();

       // Create Question
       CreateQuestion('[data-type=OQ]',Parent);
   });
}
 

Комментарии:

1. Что .avgrund() такое плагин?

2. да, его сторонний плагин