2012-05-06 8 views
17

、 プラグインは、実際の商品と同じ順序でli年代に関連するオブジェクトの配列を維持します。jQuery sortableソート前と後で.index()を取得しますか?私はタグ付けプラグインでjQueryのソートを使用してい

並べ替えが完了したら、配列内の項目の順序を更新する必要があります。

私は開始イベントで$(ui).index()を呼び出すことができると思っていましたが、更新イベントでは初期位置と最終位置を返すように同じ呼び出しを行いましたが、両方の呼び出しは-1を返します。

どうすればよいですか?


構造:

<ul> 
<li>here<a class="close">x</a></li> 
<li>are<a class="close">x</a></li> 
<li>some<a class="close">x</a></li> 
<li>tags<a class="close">x</a></li> 
</ul> 

配列構造:

[{ 
    label: 'here', 
    value: 36, 
    element: '$(the li that this info is about)', 
    index: 0 
}, 
{ 
    label: 'are', 
    value: 42, 
    element: '$(the li that this info is about)', 
    index: 1 
}, 
{ 
    label: 'some', 
    value: 21, 
    element: '$(the li that this info is about)', 
    index: 2 
}, 
{ 
    label: 'tags', 
    value: 26, 
    element: '$(the li that this info is about)', 
    index: 3 
}] 

はJavaScript:

$('ul').sortable({ 
    start: function(event, ui){...}, 
    update: function(event, ui){...} 
}); 
+1

あなたはあなたのコードの一部を投稿してくださいことはできますか?あなたが何かを知らずにあなたを導くことは困難です。ありがとう。 – jmort253

答えて

11

.index()が戻っている場合 - 1、それはあなたがその要素がDOMに利用可能になる前にその要求をしていることを示唆しています。 またはセレクタのラベルが間違っていて、もう一度呼び出された時刻が存在しないか、または.index()関数に関連して空でない場合

+7

あなたは正しいです、問題は '$(ui).index()'だけでなく '$(ui.item).index() 'を呼び出す必要がありました! – Hailwood

+5

注:$(ui.item)は必要ありません。 ui.item.index()は正常に動作します。 –

2

このようなデータを各リスト項目に関連付けることができます:あなたは、このようにjQueryを介して、このデータにアクセスすることができます

<ul id="sortable"> 
<li data-id="1" class="ui-state-default">1</li> 
<li data-id="2" class="ui-state-default">2</li> 
<li data-id="3" class="ui-state-default">3</li> 
</ul> 

:我々は起動するどこかを持っているので、

$('ul li:nth-child(0)').data('id'); 
$('ul li:nth-child(1)').data('id'); 
$('ul li:nth-child(2)').data('id'); 
27
 
$(function() { 
    $("#sortable").sortable({ 
     update: function(event, ui) { 
      console.log('update: '+ui.item.index()) 
     }, 
     start: function(event, ui) { 
      console.log('start: ' + ui.item.index()) 
     } 
    }); 
    $("#sortable").disableSelection(); 
}); 
関連する問題