带有可点击对象的jQuery可拖动列表 - 防止点击拖动

Posted

技术标签:

【中文标题】带有可点击对象的jQuery可拖动列表 - 防止点击拖动【英文标题】:jQuery draggable list with clickable objects within - preventing click on drag 【发布时间】:2010-12-31 05:35:04 【问题描述】:

我有一个可拖动的 ul,并且我想在拖动过程中停用 li 中的锚点,以便一旦 draggable.stop() 事件触发它们就不会被触发。

<ul class="draggable-list">
    <li class="list-item"><a href="#">clickable child</a></li>
    <li class="list-item"><a href="#">clickable child</a></li>
    ...
</ul>

与此类似的情况: Preventing click event with jQuery drag and drop

但我的可拖动项目不是我的可点击项目,我的可拖动项目包含我的可点击项目。

我已经尝试了上面链接中的代码,但是因为它引用了可拖动对象,所以它不能正确阻止点击:

$("ul.draggable-list").draggable(
    start: function(event, ui) 
        ui.helper.bind("click.prevent",
            function(event)  event.preventDefault(); );
    ,
    stop: function(event, ui) 
        setTimeout(function()ui.helper.unbind("click.prevent");, 300);
    
)

我试过这个,直接指向我想禁用的元素,但这会在第一次拖动尝试时启动点击,然后阻止所有点击(拖动或不拖动):

$("ul.draggable-list").draggable(
    start: function() 
        $(".list-item a").bind("click.prevent",
            function(event)  event.preventDefault(); );
    ,
    stop: function() 
        setTimeout(function()$(".list-item a").unbind("click.prevent");, 300);
    
)

我不确定如何更改 ui.helper.bind 以使其绑定到可点击的子级而不是可拖动的父级。

【问题讨论】:

【参考方案1】:

基于此处的示例:http://www.west-wind.com/Weblog/posts/762598.aspx

我就这样搞定了:

start: function(e) 
    $(".list-item a").unbind("click");
,
stop: function(e) 
    setTimeout(function() 
        $(".list-item a").click(function ()...);
    , 300);

【讨论】:

以上是关于带有可点击对象的jQuery可拖动列表 - 防止点击拖动的主要内容,如果未能解决你的问题,请参考以下文章

Highcharts 可拖动点 - 防止隐藏工具提示

可拖动的 jquery ui 触摸防止专注于 Chrome 上的输入

在jQuery中拖动后防止点击事件

在jQuery中拖动后防止点击事件

jquery可拖动非列表项到可排序列表

jQuery UI Sortable -- 如何取消拖动/排序项目的点击事件?