![](/img/trans.png)
[英]Disable jQueryUI Sortable item from being dropped in a certain area
[英]jQueryUI disable / cancel icon from being dragged in a sortable list?
我在尝试禁止列表元素被图标拖动时遇到困难。
每个li都有一个图标,单击可将其删除或添加到另一个列表中。 但是,如果拖动其图标,它将删除或添加该项目。
我希望能够拖拉li,但是要阻止图标在li上拖动。
我有一个演示: http : //jsfiddle.net/w3vvL/27/
我尝试了很多方法都没有成功,但我无法弄清楚:-
$( "#gallery li" ).draggable({
cancel: "a.ui-icon",
revert: "invalid",
containment: "document",
helper: "clone",
cursor: "move"
});
$( ".ui-icon" ).disableSelection();
//Get Dropped Item
$("#trash").droppable({
drop: function(event, ui) {
$(ui.draggable).stop();
}
});
任何帮助将不胜感激!
在您的jsfiddle中,我添加了以下内容:
$('.delete, .add').on('mousedown', function(e) {
e.stopPropagation();
});
这将停止向上冒泡鼠标按下事件,所以它抑制了可拖动的行为,所述图标(一个当a
内部元件li
被点击)。
但是,这不是一个好的解决方案! 它增加了事件处理程序的a
元素本身,所以它只会增加处理程序,当你调用它存在的元素on
。 如果您添加一个新项目(幸运的是,我使用了ADD按钮,则已实现),此修复方法不适用 。 您必须将处理程序添加到添加的任何新项目中。
我们可以做一个更好的方法。 我们可以向容器添加处理程序:
$('#gallery, #trash').on('mousedown', '.ui-icon', function(e) {
e.stopPropagation();
});
on
的第二个参数让我们指定一个过滤器。 #gallery
和#trash
元素可以接收从子元素#trash
mousedown
事件,但是我们仅希望该处理程序在事件源自.ui-icon
。 这非常好,我们只需设置一次事件处理程序,并且每个可排序的容器只有一个,因此它更简单,更有效。
我决定查看API文档 ,并发现有一个特定的选项可以解决此问题:
$("#gallery, #trash").sortable("option", "cancel", ".ui-icon");
如果它是从.ui-icon
开始的,它很清楚地告诉sortable
小部件不允许排序! 除了可以显式调用sortable(“ option”)之外,您可以将此选项添加到您的sortables的初始化中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.