使用jQuery

时间:2018-06-05 13:26:03

标签: jquery sorting jquery-ui jquery-ui-sortable

好的,我有一个LI,其中包括15个项目。这与上一个问题I asked here

有关

好吧,我在大部分时间都弄明白了。但他们现在想要的是,当我点击一个项目的复选框时,它会动态移动到前面的#34;其他检查项目背后的清单。

换句话说,首先,当没有选中项目时,它们只是以与数据库匹配的顺序排列。但是如果你点击"锁定"例如,在第5个,它应该被检查,并自动移动到列表中的第1个位置。那么如果他们点击"锁定"在第7个,它应该移动到列表中的第2个位置,依此类推。

LI中的每个项目都有自己唯一的ID,所以我不认为它会成为一个问题。我只是不确定如何在jQuery中执行此操作。

根据请求,这里是当前的代码(这是我已经得到的):



var checkedPos = 0;
$('input[id^="theId"]').on('click',
  function() {
    var theId = this.id.slice(5);
    var chkVal = this.checked;
    var suppId = <%= Request.QueryString["pid"]%>;

    if (chkVal === true) {
      updateRecordLock(theId, suppId, chkVal, checkedPos);
      checkedPos++;
      $("#" + theId).removeClass("sortable");
    } else {
      checkedPos--;
      updateRecordLock(theId, suppId, chkVal, null);
      $("#" + theId).addClass("sortable");
    }
  });
&#13;
&#13;
&#13;

我想做的是以下内容:

  1. 如果检查了第一个项目,它将转到列表的前面。
  2. 如果已经检查了一个或多个项目,则当前检查的项目将转到已检查项目的 end
  3. 如果用户取消选中当前已检查的项目,则会转到已检查列表的最后,但未选中。

1 个答案:

答案 0 :(得分:0)

好的,我决定回来找我的解决方案。

首先,我开始这样做了:

var checkedPos = $('input[id^="theId"]:checked').length;

这给了我已经检查过的项目数量的计数

然后,在我的点击事件中,我从我的原始帖子中完成了上面的代码。除了我为条件做了一个“索引”,我要么做+1或-1,要获得正确的索引值。< / p>

然后在最后,我做了类似的事情:

$("#" + theId).insertAfter("#myList li:nth-child(" + index + ")");

允许我通过将已选中的一个放入新位置来“重新排序”列表,而不刷新页面。