【发布时间】:2014-07-01 13:08:30
【问题描述】:
我正在使用 jQuery 验证来对网站上的横幅进行排序。
我有三种横幅:
- 默认Banner(公司设置,现有规则不能删除但可以排序)
- Selectable Banner(可选择的横幅形成许多列表)
- Special Banner(特殊banner,由公司设置,这个和默认的区别是可以从轮播中移除)
横幅轮播有一些规则,最多允许 7 个横幅进入轮播,其中四个可以自定义,其中四个是可选横幅。我的逻辑如下:
// no more than 7 banners allowed
$("#sortable1").sortable({
connectWith: '.connectedSortable',
//receive: This event is triggered when a connected sortable list has received an item from another list.
receive: function(event, ui) {
// so if > 7
if ($(this).children().length > 7) {
//ui.sender: will cancel the change. Useful in the 'receive' callback.
$(ui.sender).sortable('cancel');
alert('Your selection has been cancelled. A maximum 7 banners are allowed in the carousel.');
}
if ( $('#sortable1 .selectablebanner').length > 4) {
alert('Your selection has been cancelled. A maximum 4 custom banners are allowed in the carousel.');
$(ui.sender).sortable('cancel');
}
}
}).disableSelection();
});
我制定的另一条规则是不能删除默认横幅,但可以对其进行排序。我已经这样实现了:
$("#sortable2").sortable({
cancel: ".ui-state-disabled",
receive: function (event, ui) {
if (ui.item.hasClass("defaultbanner")) {
$(ui.sender).sortable('cancel');
alert("This is a default banner, it can be sorted but not removed.");
}
}
});
但是我想稍微修改一下,但不知道如何从这个逻辑开始,因为它稍微高级一些。
我要实现的规则是,如果 ul#sortable1 中有 2 个或更多“选定横幅”,则可以删除默认横幅。但是,例如,如果只有一个 defaultbanner 和一个 selectablebanner。然后我希望应用我之前的验证,即无法删除默认横幅。
谁能帮我解决这个问题。
我创建了一个jsFiddle,其中包含我的完整代码。
提前致谢。
【问题讨论】:
-
"Special Banner Selectable Banner Special Banner" - 第一个和第三个不一样..? “其中四个可以自定义”,“默认横幅” - 什么是自定义横幅,什么是默认横幅..?
-
你能解释一下为什么你在那个小提琴中多次初始化所有东西......?
-
对不起,@TilwinJoy 应该是特殊横幅、可选横幅、默认横幅。默认是公司设置的,特殊banner可以去掉但是是公司设置的。 selectable 是客户端可选择的
-
@TilwinJoy 你现在明白了吗?我需要的规则是,如果 #sortable 有超过 2 个可选横幅(在每个可选横幅的类中),那么它们可以从此列表中删除。但是,如果少于 2 个,则默认横幅可以排序但不会删除
-
是的,现在我得到了一些。您能否将规则一一添加为有问题的项目符号列表,以便更容易理解..?顺便说一句,对于设置每个规则,您正在使用一组新选项重新初始化可排序,因此您将丢失先前设置的规则……您需要在一次初始化中添加所有条件检查。同时为不同的横幅应用不同的颜色将是一个更好的理解的好主意......
标签: jquery jquery-ui validation jquery-ui-sortable