Search code examples
jqueryadditionsubmenu

Jquery Netstable add menu and submenu issue


Please help. I don't understand where is issue? This structure netstable menu.

Sample Fiddle

<a href="" class="btn keyoptadd" onclick="return false">Add</a>
<a href="" class="btn keyoptdelete" onclick="return false">Del</a>

<div class="dd" id="nestable_list_1">
    <ol class="dd-list">
        <li class="dd-item dd3-item" data-id="2">
            <div class="dd-handle dd3-handle" style="height:42px;"></div>
            <div class="dd3-content" style="height:42px;">
                <input type="text" name="key[2][key]" value="2" class="input-large">
                <input type="text" name="key[2][expl]" class="input-large" value=" 1234">
                <a href="" class="btn keyoptadd_in" onclick="return false">Add</a>
                <a href="" class="btn keyoptdelete_in" onclick="return false">Del</a>
            </div>  
            <ol>
                <li class="dd-item dd3-item" data-id="3">
                    <div class="dd-handle dd3-handle" style="height:42px;"></div>
                    <div class="dd3-content" style="height:42px;">
                        <input type="text" name="key[3][key]" value="2 - 1" class="input-large">
                        <input type="text" name="key[3][expl]" class="input-large" value="555">
                        <a href="" class="btn keyoptadd_in" onclick="return false">Add</a>
                        <a href="" class="btn keyoptdelete_in" onclick="return false">Del</a>
                    </div> 
                    <ol>
                        <li class="dd-item dd3-item" data-id="4">
                            <div class="dd-handle dd3-handle" style="height:42px;"></div>
                            <div class="dd3-content" style="height:42px;">
                                <input type="text" name="key[4][key]" value="2 - 1 - 1" class="input-large">
                                <input type="text" name="key[4][expl]" class="input-large" value="444">
                                <a href="" class="btn keyoptadd_in" onclick="return false">Add</a>
                                <a href="" class="btn keyoptdelete_in" onclick="return false">Del</a>
                            </div> 
                        </li>
                    </ol>
                </li>
            </ol>
        </li>
    </ol>
    <textarea id="nestable_list_1_output" style="display:none;" name="phonetype" class="m-wrap span12"></textarea>
</div>
</div>

how to make menu and sub menu. and jquery codes:

$(function(){
    var countedkey = $('.dd-list li').length;
    $('.keyoptadd').click(function(e){
        countedkey++;
        $('.dd-list').append('<li class="dd-item dd3-item" data-id="'+countedkey+'"><div class="dd-handle dd3-handle" style="height:42px;"></div><div class="dd3-content" style="height:42px;"><input type="text" name="key['+countedkey+'][key]" class="input-large"> <input type="text" name="key['+countedkey+'][expl]" class="input-large"><a href="" class="btn keyoptadd" onclick="return false">Ek</a><a href="" class="btn keyoptdelete" onclick="return false">Sil</a></div></li>');   
        jQuery('.afx').trigger('click',function(e){});
        return false
    });
    $('.keyoptdelete').click(function(){
        countedkey--;
        $('.dd-list li:last').remove();
        jQuery('.afx').trigger('click',function(e){});
        return false
    });
    $('.keyoptadd_in').click(function(e){
        countedkey++;
        $('.dd3-content').append('<ol><li class="dd-item dd3-item" data-id="'+countedkey+'"><div class="dd-handle dd3-handle" style="height:42px;"></div><div class="dd3-content" style="height:42px;"><input type="text" name="key['+countedkey+'][key]" class="input-large"> <input type="text" name="key['+countedkey+'][expl]" class="input-large"><a href="" class="btn keyoptadd_in" onclick="return false">Ek</a><a href="" class="btn keyoptdelete_in" onclick="return false">Sil</a></div></ol></li>');    
        jQuery('.afx').trigger('click',function(e){});
        return false
        });
    $('.keyoptdelete_in').click(function(){
        countedkey--;
        $(this).parent().remove();
        jQuery('.afx').trigger('click',function(e){});
        return false
    });
    App.init();

    jQuery('.afx').click(function(e){
        UINestable.init();
        e.stopPropagation();
    });
    UINestable.init();
});

Solution

  • You are targeting the wrong element to append the new element to.

    You can use jQuery closest to match the ol ancestor like:

    $('<ol style="display:block"><li class="dd-item dd3-item" data-id="' + countedkey + '"><div class="dd-handle dd3-handle" style="height:42px;"></div><div class="dd3-content" style="height:42px;"><input type="text" name="key[' + countedkey + '][key]" class="input-large"> <input type="text" name="key[' + countedkey + '][expl]" class="input-large"><a href="" class="btn keyoptadd_in2" onclick="return false">Add</a><a href="" class="btn keyoptdelete_in" onclick="return false">Del</a></div></ol></li>').appendTo($(this).closest('ol'));
    

    Demo: http://jsfiddle.net/1xx2u6z5/