1

PHPで一連のリストを作成しています。次に、jQueryを使用して、を使用してリストを並べ替えようとしてい.sortable()ます。リストが1つしかない場合は、機能します。ただし、複数のリストがある場合、jQueryは両方のリストをループし、最後のリストのみを記憶しています。私は.each()これをどのように引き起こしているのかわかりますが、それを回避する方法がわかりません。

HTML

<div class="list">
  <ul id="sortList_1">
    <li class="item_1" id="item_111">Item 1</li>
    <li class="item_2" id="item_222">Item 2</li>
    <li class="item_3" id="item_333">Item 3</li>
  </ul>
</div>

    <div class="list">
      <ul id="sortList_2">
        <li class="item_1" id="item_444">Item 1</li>
        <li class="item_2" id="item_555">Item 2</li>
        <li class="item_3" id="item_666">Item 3</li>
      </ul>
    </div>

jQuery

$(".list").each(
        function(e) {
        num = e + 1;
        $("#sortList_" + num).sortable(
            {stop:function(i) {
                serial = $("#sortList_"  + num).sortable("serialize");
                $.ajax({
                    type: "GET",
                    url: "writeDB.php",
                    data: serial
                });
            }
        });    
    });
4

1 に答える 1

2

コードを実行すると、すべてのリストに.sortable('serialize')戻ります。ドキュメントnullによると:

serializeが空の文字列を返す場合は、id属性にアンダースコアが含まれていることを確認してください。これらは次の形式である必要があります。"set_number"たとえば、id属性foo_1、foo_5、foo_2を持つ3要素リストは、foo [] = 1&foo [] = 5&foo []=2にシリアル化されます。アンダースコア、等号、またはハイフンを使用して、セットと数値を区切ることができます。たとえば、foo=1またはfoo-1またはfoo_1はすべてfoo[]=1にシリアル化されます。

したがって、各アイテムを変更してid、フォーマットの属性を持つことができます

<li class="item_1" id="item_444">Item 1</li>

スクリプトは正常に機能するはずです。item_プレフィックスを、アイテムの元のリスト(つまり、 list1_...vs 。 list2_...を参照するものに変更するか、シリアル化されたデータのリストをdataajax呼び出しで指定することを検討してください。

data: { serial: serial, list_id: $(this).attr('id') }

編集:コードを少しクリーンアップすることもできます:http://jsfiddle.net/u425C/

于 2012-07-11T01:40:14.610 に答える