我希望jQuery UI Sortable中的一行只有在具有cansort
类时才可排序。我将它设置为cancel: ':not(.cansort)'
但它拒绝让我对任何内容进行排序,包括具有cansort
类的行。
我知道我可以显式地添加一个禁用类,但我将cansort
类用于其他目的,这意味着每次我做出可排序的东西时我都必须删除已禁用的类并添加{{1 } .class。每次我切换一些可以排序的东西时,我都不想添加和删除一个类。
我不想限制cansort
属性中可排序的内容,因为每个元素都可以排序,我只能使用items
类动态切换它。
答案 0 :(得分:1)
这样做的原因是cancel
窗口小部件处理ui.mouse
选项的方式(几个jQueryUI窗口小部件用来处理鼠标事件的窗口小部件)。查看this line of code:
elIsCancel = (typeof this.options.cancel == "string"
&& event.target.nodeName ?
$(event.target).closest(this.options.cancel).length : false);
这意味着您的选择器会在closest
的元素上使用mousedown
运行。所以我们来一个li.cansort
可排序的项目。这将生成一个类似于以下内容的jQuery选择器:
$("li.cansort").closest(":not(.cansort)").length;
这将总是返回1
的长度,因为所有可排序的ul
的父li
都没有.cansort
类。这意味着使用这种选择器,排序总是被取消。
幸运的是,如果您只在cancel
选择器中添加标记名称,这很容易解决:
cancel: "li:not(.cansort)"
以下是一个示例: http://jsfiddle.net/7hSnc/(尝试从li
选择器中移除cancel
)