【问题标题】:jQuery sortable - sort based on value of input fieldjQuery sortable - 根据输入字段的值进行排序
【发布时间】:2012-06-11 15:53:52
【问题描述】:

免责声明 - 我不完全确定这是否可能。但在这种情况下,我仍然希望有人指出一种可能的替代方案或某种黑客行为。

情况是这样的。

我有一个使用 jQuery UI Sortable 的工作列表,因此用户可以拖放列表中的项目。

jQuery:

$(document).ready(function() {
    $("#test-list").sortable({
      handle : '.big-handle',
      update : function () {
          var order = $('#test-list').sortable('serialize');
        $("#info").load("../sortable/process-sortable.php?"+order);
      }
    });
});

Ajax 部分将新订单存储在数据库中,您无需担心。

HTML:

<ul id="test-list">
<li id='listItem_1'><div class='main-item big-handle'><img src='../sortable/arrow.png' alt='move' width='16' height='16' class='handle' /><strong>Item 1</strong></div></li>
<li id='listItem_2'><div class='main-item big-handle'><img src='../sortable/arrow.png' alt='move' width='16' height='16' class='handle' /><strong>Item 1</strong></div></li>
<li id='listItem_3'><div class='main-item big-handle'><img src='../sortable/arrow.png' alt='move' width='16' height='16' class='handle' /><strong>Item 1</strong></div></li>
</ul>

一切正常。现在,棘手的部分。我的客户希望每个列表项旁边有一个输入字段,用户可以在其中输入一个数字,这应该 onBlur 将该列表项移动到指定位置。因此,如果用户在列表项编号旁边的字段中输入“1”。 3,然后该项目应该移动到列表上的第一个位置,就像它被拖到那里一样。这个可以吗?

您无需为整个列表提出完整的解决方案,假设我只需要一个可以移动项目编号的字段。 3 左右。

【问题讨论】:

    标签: javascript jquery jquery-ui-sortable


    【解决方案1】:

    这个怎么样:jsFiddle example

    $("#test-list").sortable({
        handle: '.big-handle',
        update: function() {
            var order = $('#test-list').sortable('serialize');
            $("#info").load("../sortable/process-sortable.php?" + order);
        }
    });
    
    $("#test-list input").blur(function() {
        var pos = $(this).val() - 1;
        if (pos >= 0 && pos <= $("#test-list li").length - 1) {
            if ($(this).parents('li').index() > pos) {
                //move up
                $(this).parents('li').insertBefore($("#test-list li:eq(" + pos + ")"));
            }
            if ($(this).parents('li').index() < pos) {
                //move down
                $(this).parents('li').insertAfter($("#test-list li:eq(" + pos + ")"));
            }
            $("#test-list input").val('');
        }
    });​
    

    【讨论】:

      【解决方案2】:

      试试这个

      ​$('input').on('blur', function(){
         var $el = $(this),
         pos = $el.val(),
         $parent = $el.closest('li');
      
         $parent.insertBefore($('li').eq(pos));
      
      })​​​
      

      功能演示:http://jsfiddle.net/YyvjH/

      模拟拖动的过渡效果可以在 CSS3 中完成。

      【讨论】:

      • 可能想要修复那个小提琴链接。
      【解决方案3】:

      eq(2) 方法获取的是我们删除的第 n 个匹配元素。在这种情况下从 位置 3(索引 2),因为这是您要求移动的位置。我们从 DOM 中删除它 然后插入到输入框指定的位置。

      //do this on blur
      var index = parseInt($("input").val())
        , element = $("#test-list li").eq(2).remove();
      $("#test-list li").eq(index - 1).before(element); // -1 because users like 1 based indices   
      

      【讨论】:

      • 使用该代码时出现“非法字符”错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2018-03-01
      • 1970-01-01
      • 2020-04-10
      • 2018-05-18
      • 1970-01-01
      相关资源
      最近更新 更多