2011-10-03 57 views
3

我有有两个按钮来控制包含项的优先级列表框。当选择多个项目时,除了下移逻辑之外,一切正在工作。的jQuery移动多个项目在列表框下

如果选择了两个项目,没有任何反应,而如果三个或更多的选择,只有底部一个移动..有一个简单的方法来处理这个使用jQuery?

当前实现:

<div id="selected"> 
    <div><strong>Selected</strong></div> 
    <div id="selected-items"> 
     <input type="select" multiple="multiple" id="selected-items-select"> 
      <option/> 
     </input> 
    </div> 
</div> 

<div id="priority" style="display: none;"> 
    <div><input type="button" id="move-up" value="^" /></div> 
    <div><input type="button" id="move-down" value="v" /></div> 
</div> 

<script type="text/javascript"> 

    $(document).ready(function() { 
     $('#move-up').click(moveUp); 
     $('#move-down').click(moveDown); 
    }); 

    function moveUp() { 
     $('#selected-items select :selected').each(function (i, selected) { 
      $(this).insertBefore($(this).prev()); 
     }); 
     $('#selected-items select').focus().blur(); 
    } 

    function moveDown() { 
     $('#selected-items select :selected').each(function (i, selected) { 
      $(this).insertAfter($(this).next()); 
     }); 
     $('#selected-items select').focus().blur(); 
    } 
</script> 

另外,还要注意的$('#selected-items select').focus().blur();线..我有它,因为有时候优先级不更新,直到列表框获得焦点。有没有更好的方法来做到这一点?

+0

你能提供的HTML呢? – Blazemonger

+0

当然。 Html现在在那里。 – shuniar

回答

6

当您尝试向下移动多个项目,你通过他们循环,以便从顶部到底部。不幸的是,这意味着你移动第二选择的项目后选择的第一项,然后第二个选项的第一个后,导致没有变化。

我用的伎俩,通过选择向下移动时,解决了这个问题,从here循环倒退。

更新:增加了一个测试,看看你动了你的选择,以顶部或底部,避免诉诸选择:http://jsfiddle.net/FBTVk/1/

function moveUp() { 
    $('#selected-items select :selected').each(function(i, selected) { 
     if (!$(this).prev().length) return false; 
     $(this).insertBefore($(this).prev()); 
    }); 
    $('#selected-items select').focus().blur(); 
} 

function moveDown() { 
    $($('#selected-items select :selected').get().reverse()).each(function(i, selected) { 
     if (!$(this).next().length) return false; 
     $(this).insertAfter($(this).next()); 
    }); 
    $('#selected-items select').focus().blur(); 
} 
+0

尼斯的工作 - 虽然还是有点怪的时候多​​到达终点的情况。在顶部/底部,他们将再次开始在他们自己之间切换。可能要在特殊情况下在选择列表边界处捕捉。 – mrtsherman

+0

太棒了,这个效果很好。我知道问题所在,但不确定如何向后循环。 – shuniar

+0

@shuniar:请注意,我链接到的SO问题有多种解决方案来反转选择。阅读并选择你最喜欢的那个。 – Blazemonger

相关问题