我已经搜索和搜索了如何做到这一点,但没有效果.
基本上我有一个非常标准的jQuery可排序列表,使用抓取器允许用户重新排列列表
我想添加的是每个列表项的输入框,自动填充该项的#,允许用户输入任何数字(只要是<==列表中的项目总数)<然后按“Enter”或按一个按钮重新排列列表. 请参阅YouTube Playlist工具或Netflix Queue作为我所指的一个例子:
http://img195.imageshack.us/img195/7715/youtubeplaylistrearrangc.png
http://www.thedigeratilife.com/images/netflix-queue-big.jpg
我无法理解这一点 – 任何帮助将不胜感激!
戴夫
解决方法
的jsfiddle:
HTML:
<ul id="sortable"> <li class="ui-state-default"> <span>⇅</span><input type="text"/>Item 1 </li> <li class="ui-state-default"> <span>⇅</span><input type="text"/>Item 2 </li> <li class="ui-state-default"> <span>⇅</span><input type="text"/>Item 3 </li> <li class="ui-state-default"> <span>⇅</span><input type="text"/>Item 4 </li> <li class="ui-state-default"> <span>⇅</span><input type="text"/>Item 5 </li> <li class="ui-state-default"> <span>⇅</span><input type="text"/>Item 6 </li> <li class="ui-state-default"> <span>⇅</span><input type="text"/>Item 7 </li> </ul>
CSS:
http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/themes/base/jquery-ui.css
li { margin: 1px; width: 130px; padding:2px; vertical-align:middle; } li span { color: gray; font-size: 1.1em; margin-right: 5px; margin-left: 5px; cursor: pointer; height:100%; } input[type="text"] { width: 32px; margin-right: 5px; border: 1px solid lightgay; color: blue; text-align: center; }
使用Javascript:
sort_ul = $('#sortable'); // * sortable <ul> itemsCount = $('#sortable li').length; // * total number of items function updateIndexes() { // * function to update $('#sortable li input').each( // items numbering function(i) { $(this).val(i + 1); }); } updateIndexes(); // * start by update items numbering sort_ul.sortable({handle: 'span',// * apply 'sortable' to <ul> stop: function(event,ui){ updateIndexes(); // * when sorting is completed,} // update items numbering }); $('#sortable li input').keyup( // * watch for keyup on inputs function(event) { if (event.keyCode == '13') { // * react only to ENTER press event.preventDefault(); // * stop the event here position = parseInt($(this).val());// * get user 'new position' li = $(this).parent(); // * store current <li> to move if (position >= 1 // * proceed only if && position <= itemsCount){ // 1<=position<=number of items li.effect('drop',function(){ // * hide <li> with 'drop' effect li.detach(); // * detach <li> from DOM if (position == itemsCount) sort_ul.append(li); // * if pos=last: append else // else: insert before position-1 li.insertBefore($('#sortable li:eq('+(position - 1)+')')); updateIndexes(); // * update items numbering li.effect('slide'); // * apply 'slide' effect when in }); // new position }else{ li.effect('highlight'); } // * if invalid position: highlight }}});