如何触发jquery.nestable树节点的click事件

 我来答
森林的沉睡
2017-08-23 · TA获得超过297个赞
知道小有建树答主
回答量:179
采纳率:85%
帮助的人:156万
展开全部

从源码来看, 绑定在树节点的click事件, 会因为先触发内部的onmousedown, 调用dragStart方法而导致原DOM节点被移除, 继而导致click事件无法触发;

这里在不修改源码的前提下提供两个方案:
1. click事件换成mousedown事件
2. 通过对源码onStartEvent方法的分析, 在树节点上放一个button将树节点的"拖拽开始"和"点击事件"分离(注意这里的button需要不同于nestable自己的折叠按钮的样式设定)

举个栗子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta name="author" content="sleest">
    <meta name="description" content="nestable example for item click, 2017/08/23">
    <title>Document</title>
    <meta charset="utf-8">
    <style>
    .dd {
        position: relative;
        display: block;
        list-style: none;
        line-height: 1.5;
    }
    .dd-list {
        display: block;
        position: relative;
        padding: 0;
        list-style: none;
    }
    .dd-list .dd-list {
        padding-left: 2rem;
    }
    .dd-collapsed .dd-list {
        display: none;
    }

    .dd-item,
    .dd-empty,
    .dd-placeholder {
        display: block;
        position: relative;
        min-height: 20px;
        line-height: 1.5;
    }

    .dd-handle {
        display: block;
        height: 30px;
        margin: 5px 0;
        padding: 5px 10px;
        border: 1px solid #ccc;
        background: #fff;
        box-sizing: border-box;
        -moz-box-sizing: border-box;
    }
    .dd-handle:hover {
        color: #2ea8e5;
    }

    /* 注意这里只设置nesttable自带折叠按钮的样式 */
    .dd-item>button[data-action] {
        display: block;
        position: relative;
        cursor: pointer;
        float: left;
        width: 25px;
        height: 20px;
        margin: 5px 0;
        padding: 0;
        text-indent: 100%;
        white-space: nowrap;
        overflow: hidden;
        border: 0;
        background: transparent;
        font-size: 12px;
        line-height: 1;
    }
    /* 注意这里只设置nesttable自带折叠按钮的样式 */
    .dd-item>button[data-action]:before {
        content: '+';
        display: block;
        position: absolute;
        width: 100%;
        text-align: center;
        text-indent: 0;
    }
    .dd-item>button[data-action="collapse"]:before {
        content: '-';
    }

    .dd-placeholder,
    .dd-empty {
        margin: 5px 0;
        padding: 0;
        min-height: 30px;
        background: #f2fbff;
        border: 1px dashed #b6bcbf;
        box-sizing: border-box;
        -moz-box-sizing: border-box;
    }
    .dd-empty {
        border: 1px dashed #bbb;
    }

    .dd-dragel {
        position: absolute;
        pointer-events: none;
        z-index: 9999;
    }
    .dd-dragel>.dd-item .dd-handle {
        margin-top: 0;
    }
    .dd-dragel .dd-handle {
        -webkit-box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
        box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
    }
    </style>
</head>
<body>
    <div class="dd">
        <ol class="dd-list">
            <li class="dd-item" data-id="1">
                <div class="dd-handle">Item 1</div>
                <button id="btn-demo" style="position: absolute;top: 0;right: 0;">A Button</button>
            </li>
            <li class="dd-item" data-id="2">
                <div class="dd-handle">Item 2</div>
            </li>
            <li class="dd-item" data-id="3">
                <div class="dd-handle">Item 3</div>
                <ol class="dd-list">
                    <li class="dd-item" data-id="4">
                        <div class="dd-handle">Item 4</div>
                    </li>
                    <li class="dd-item" data-id="5">
                        <div class="dd-handle">Item 5</div>
                    </li>
                </ol>
            </li>
        </ol>
    </div>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.js"></script>
    <script src="https://cdn.bootcss.com/Nestable/2012-10-15/jquery.nestable.js"></script>
    <script>
    function someEvent(event){
        console.log(this,event.type);
    }
    $('.dd').nestable();
    $('body').on('mousedown', '.dd-item', someEvent);
    $('body').on('click', '#btn-demo', someEvent);
    </script>
</body>
</html>

结果:

DoramiHe
推荐于2017-08-23 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25334 获赞数:59538
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
委派事件就可以了
html代码
123<li class="dd-item" data-id="1"> <div class="dd-handle">Item 1</div></li>1234jquery代码$(document).on("click",".dd-item",function(){ alert("clicked"); })
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunhk_25
2014-10-20 · TA获得超过1123个赞
知道小有建树答主
回答量:497
采纳率:50%
帮助的人:358万
展开全部

委派事件就可以了

html代码

<li class="dd-item" data-id="1">
        <div class="dd-handle">Item 1</div>
</li>
jquery代码
$(document).on("click",".dd-item",function(){    
    alert("clicked");
 })
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式