0

我正在使用 jQuery sortable 来操作图像顺序并写入数据库。该功能运行良好。

PHP

 echo "<div class='revisionNum'>";
            echo "<ul id='sortable_" . $count ."'>";

            while($row = mysql_fetch_array($result)) {
                $sortImageName = $row['OrgImageName']; 
                $sortPath = "../data/gallery/" . $galleryID . "/images/album/" . $sortImageName;
                echo "<li class='sortPhotos' id='item_{$row['id']}' >";
                echo '<img class="sortImage" src="'. $sortPath .'"/>';
                echo "<p>" . $sortImageName . "</p>";
                echo "</li>";
            }
            echo "</ul>";
            echo "</div>";

jQuery

//make sortable
    $(".revisionNum").each(
        function(e) {
        num = e + 1;
        $("#sortable_" + num).sortable(
            {stop:function(i) {
                serial = $("#sortable_"  + num).sortable("serialize");
                $.ajax({
                    type: "GET",
                    url: "../albumUploader/queries/sort.php",
                    data: serial
                });
            },
            opacity:1.0,
            //cursor: move
        });    
    });

MYSQL

foreach($_GET['item'] as $key=>$value) {

    mysql_query("   UPDATE galleryimage
                    SET sort = '{$key}'
                    WHERE id = '{$value}'  
                ");

问题是当我有多个时,如果 [.revisionNum],<div class=''revisionNum>我只抓取 serial = $("#sortable_" + num)最后一个 UL,而不是我正在排序的实际 UL。感谢您对此的帮助。让我知道是否需要进一步澄清。

4

1 回答 1

2

我不确定我是否完全理解您的问题,但我认为您正在寻找以下内容:

该变量num将更改您在每个循环中创建的每个循环。但最后它将具有最后一个循环的值。因为num似乎是一个全局变量,所以不能在 stop 函数中调用它。然后它将只使用它拥有的最后一个值。最后一个循环的值。(解释你的问题)

为了解决这个问题,我建议将您的代码更改为:

$(".revisionNum").each(
    function(e) {
    $(this).children("ul").sortable(
        {stop:function(i) {
            num = $(this).children("ul").attr("id").replace("sortable_", "");
            serial = $(this).children("ul").sortable("serialize");
            ...

$(this)指的是$(".revisionNum")你正在循环,它会被记住,也在停止功能中。

于 2012-07-10T22:15:03.970 回答