【问题标题】:jquery sortable validationjquery可排序验证
【发布时间】: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


【解决方案1】:

这对我来说并不完全清楚,但这是我对您可能在寻找什么的最佳猜测。

$("#sortable2").sortable({
    cancel: ".ui-state-disabled",
      receive: function (event, ui) {
           if (ui.item.hasClass("defaultbanner") && $('#sortable1 li').length <= 1) {
               $(ui.sender).sortable('cancel');
               alert("This is a default banner, it can be sorted but not removed.");
           }
           else if($('#sortable1 li').length <= 1) {
              $(ui.sender).sortable('cancel');
              alert('You must have at least two banners');    
          }
       }
  });

Fiddle

【讨论】:

  • 初始化所有东西两次的任何特殊原因..?
  • @TilwinJoy 不,sortables 的初始化肯定可以合并.. 实际上看起来.sortable 每个#sortable 都被初始化了三次
猜你喜欢
  • 2023-03-27
  • 2011-06-28
  • 1970-01-01
  • 2019-09-30
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
相关资源
最近更新 更多