【问题标题】:jQuery sortable - PHPjQuery 可排序 - PHP
【发布时间】:2012-07-02 19:18:35
【问题描述】:

我正在使用 jQuery sortable() 对数据库中的图像进行排序。 HTML如下。

<h2>Revision 1</h2>

<ul class='sortable'>
<li class='sortPhotos' id='item_249745' >
     <img src="../data/gallery/13387/images/album/1650519801.jpg"/>
     <p>1650519801.jpg</p>
</li>
<li class='sortPhotos' id='item_249744' >
     <img src="../data/gallery/13387/images/album/704633205.jpg"/>
     <p>704633205.jpg</p>
</li>
</ul>

<h3>Revision 2</h3>

<ul class='sortable'>
<li class='sortPhotos' id='item_518811' >
     <img src="../data/gallery/13387/images/album/001.jpg"/>
     <p>001.jpg</p>
</li>
<li class='sortPhotos' id='item_518812' >
     <img src="../data/gallery/13387/images/album/003.jpg"/>
     <p>003.jpg</p>
</li
</ul>

JS

<script>

    $(".sortable").sortable({stop:function(i) {
            $.ajax({
                type: "GET",
                url: "../albumUploader/queries/sort.php",
                data: $(".sortable").sortable("serialize")
            });
        },
        opacity:1.0
    });    
</script> 

最后是 SQL

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

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

上述示例的问题——第一个修订版是唯一在数据库中实际排序的修订版。其他修订版不是。从 Chrome Web 开发人员扩展程序中监控网络来看,这两个列表都发送到数据库,但第二个列表没有写入。关于这个有什么想法吗?

【问题讨论】:

  • 我需要弄清楚如何为每个 UL 提供一个唯一的 id - 似乎 sortable 只是识别第一个而不是 .sortable 作为一个类
  • 等待 - 两个列表是否都发送到 PHP 代码?您的回答似乎暗示是,但您的评论似乎暗示不是。

标签: php jquery jquery-ui


【解决方案1】:

每个可排序对象都需要有自己的唯一 ID。我解决了:

ul id='sortable_" . $count ."'
$count++;

$(".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
        });    
    });

【讨论】:

    【解决方案2】:

    一种解决方案是一次只向服务器发送一个列表。这可以通过从$(this)而不是$(".sortable")发送数据来完成:

    $(".sortable").sortable({stop:function(i) {
            $.ajax({
                type: "GET",
                url: "../albumUploader/queries/sort.php",
                data: $(this).sortable("serialize")
            });
        },
        opacity:1.0
    });
    

    【讨论】:

    • 我想我应该说,虽然这种事情在 jQuery 事件中是标准的,但我还没有用这个特定的插件实际测试过它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2010-09-16
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多