欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

左侧点击右侧联动且可排序编辑保存选中元素参数

程序员文章站 2022-04-28 09:02:15
...
<div>
    <div>
        <div class="materMain" id="js_materA">
            <ul>
                <li>
                    <a href="javascript:">
                        <label>
                            <input type="hidden" name="左1" data-num="1">
                            <input type="checkbox" name="c_id" value="90">左1</label>
                    </a>
                </li>
                <li class="active">
                    <a href="javascript:">
                        <label>
                            <input type="hidden" name="左2" data-num="3" value="1">
                            <input type="checkbox" name="c_id" value="19">左2
                        </label>
                    </a>
                </li>
                <li>
                    <a href="javascript:">
                        <label>
                            <input type="hidden" name="左1" data-num="1">
                            <input type="checkbox" name="c_id" value="90">左1</label>
                    </a>
                </li>
                <li class="active">
                    <a href="javascript:">
                        <label>
                            <input type="hidden" name="左2" data-num="3" value="1">
                            <input type="checkbox" name="c_id" value="19">左2
                        </label>
                    </a>
                </li>
                <li>
                    <a href="javascript:">
                        <label>
                            <input type="hidden" name="左1" data-num="1">
                            <input type="checkbox" name="c_id" value="90">左1</label>
                    </a>
                </li>
                <li class="active">
                    <a href="javascript:">
                        <label>
                            <input type="hidden" name="左2" data-num="3" value="1">
                            <input type="checkbox" name="c_id" value="19">左2
                        </label>
                    </a>
                </li>
            </ul>
        </div>
    </div>
    <div>
        <div  id="js_materADesc">
            <ul class="editMater">
                <li data-name="左1" data-id="1">
                    <div>
                        <a href="javascript:" class="icon-plus"></a>
                        <span>左1x
                            <b>3</b>
                        </span>
                        <a href="javascript:" class="icon-minus"></a>
                    </div>
                </li>
                <li data-name="左2" data-id="1">
                    <div>
                        <a href="javascript:" class="icon-plus"></a>
                        <span>左2x
                            <b>6</b>
                        </span>
                        <a href="javascript:" class="icon-minus"></a>
                    </div>
                </li>
               
            </ul>
        </div>
    </div>
</div>


左侧点击右侧联动且可排序编辑保存选中元素参数

JQ部分

$("#js_materA ul li input[type=checkbox]").on("click",function(e){
                    //  e.stopPropagation();
                     var iNow = $(this).parents("li");
                     iNow.toggleClass("active");
                     iNow.find("input[type=hidden]").val(iNow.index());
                     if($(this).parents("li").hasClass("active")){
                        var iNumber = 1;
                        var txt = $(this).parents("li.active").find("input[type=hidden]").attr("name");
                        var oId = $(this).parents("li.active").find("input[type=hidden]").val();
                        var tmpHtml='<li data-name="'+txt+'" data-id="'+oId+'"><div><a href="javascript:" class="icon-plus"></a><span>'+txt+'x<b>'+iNumber+'</b></span><a href="javascript:" class="icon-minus"></a></div></li>';   
                        //结构
                       editBtn($(tmpHtml));
                         //排序
                   
                        //
                    }else if(!$(this).parents("li").hasClass("active")){
                        var iNow = $(this).parents("li").index();
                        var txt = $(this).parents("li").find("input[type=hidden]").attr("name");
                        var arrDel = $("#js_materADesc ul li");
                        for(var i=0;i<arrDel.length;i++){
                               var temp = arrDel[i].dataset.name;  
                               if(txt==temp){
                                   $("#js_materADesc ul li").eq(i).remove();
                               }
                        }
                    }
                })
 function editBtn(template){
                template.appendTo("#js_materADesc ul").on("click",'a',function(){
                    var temp = 1;
                    var o = Number($(this).siblings("span").find("b").text());
                    if($(this).hasClass("icon-plus")){
                            o+=1;
                    } else {
                        if(o==1){
                            o=1;
                        } else {
                            o-=1;
                        }
                    }
                    $(this).siblings("span").find("b").text(o);
                   $("#js_materA ul li").eq($(this).parents("li")[0].dataset.id).find("input[type=hidden]").attr("data-num",o);
                });
                 
                $("#js_materADesc ul li").sort(sortLi).appendTo($("#js_materADesc ul"));
            }

 //排序
        function sortLi(a, b){
            return ($(b).data('id')) < ($(a).data('id')) ? 1 : -1;    //升序排列
        }

说明:

给input添加点击事件(注:label的for为空时要把for去掉否则影响input选中事件)

1:checkbox选中时父集添加class="active",通过父集是否有active的class对右边显示内容进行编辑

2:选中时,把name,id都赋值给右边动态生成的li的自定义data-*属性中,方便排序以及删除

3:动态生成里的每个a点击事件特意单独写,用到了template.appendTo(父集).on(事件,元素,fn)

4:点击事件都是a的原因,判断元素class编辑功能,增/减

template.appendTo("#js_materADesc ul").on("click",'a',fn)
//编辑的数量动态赋值给左边对应元素的input[type="hidden"],方便后台取值
$("#js_materA ul li").eq($(this).parents("li")[0].dataset.id).find("input[type=hidden]").attr("data-num",o);

无论元素选择先后顺序,都会升序排列显示,一一对应

//排序
function sortLi(a, b){
return ($(b).data('id')) < ($(a).data('id')) ? 1 : -1; //升序排列
}

(编辑页面时要先初始化数据,动态添加右侧数据)

data-*属性使用技巧

获取数据  dataset.名字 

 已经有data-*属性的input,设置数据的时候用input.attr("data-名字",新数据)   获取数据 input.attr("data-名字")






相关标签: 联动