php - 如何在使用 Jquery sortable 排序后检索父容器 ID?

标签 php javascript jquery jquery-ui-sortable

我有以下标记和 javascript 来对某些项目进行排序。项目可以在一个 block 内或跨其他 block 进行排序。它有效,但我在将项目从一个 block 移动到另一个 block 后检索正确的 block ID 时遇到问题。

例如,如果我在“ block 1”中移动项目 1,我会得到“我在 block = block_1”,但如果我将项目 1 移动到 block 2,我仍然会得到我在 block 1 中。

但我想将 block 2 作为其父容器。我需要检索此 ID,以便我可以执行一些 ajax 并相应地更新数据库。

你能帮我改正这个吗??

<div id="blocks_sortable">
    <div id="block_1">
        <h2>Block 1</h2>

        <div class="items_sortable connectedSortable">
            <div id="item_1"> 
                <span>Item 1</span></div>   
            <div id="item_2"> 
                <span>Item 2</span></div>
            <div id="item_3"> 
                <span>Item 3</span></div>
        </div>
    </div>  
    <div id="block_2">
        <h2>Block 2</h2>

        <div class="items_sortable connectedSortable">
            <div id="item_4"> 
                <span>Item 4</span></div>   
            <div id="item_5"> 
                <span>Item 5</span></div>
            <div id="item_6"> 
                <span>Item 6</span></div>
        </div>
    </div>
</div>

<script>
$("#blocks_sortable").sortable({ });
$(".items_sortable").sortable({
     connectWith: '.connectedSortable'
    , forcePlaceholderSize: true
    ,         stop : function(event, ui){
                    alert("I am in block = "+$(this).parent().attr("id"));
                }
}).disableSelection();      
</script>

谢谢。

最佳答案

我怀疑问题是您使用了错误的事件。基本上我认为正在发生的事情是停止事件触发得太早或针对错误的对象。

我会阅读文档 Here看看是否有更适合您尝试做的事情的事件。

我认为您想要的是“更新”或“停用”事件之类的东西。

如果您将一个项目从一个“ block ”移动到另一个“ block ”,这两个事件将针对每个“ block ”触发一次。

如果在一个 block 内移动,更新只会触发一次

停用将始终触发所有 block 。

通过更新,您可以通过检查 ui.sender 来检查事件是否在“非原始” block 中触发:

        $(".items_sortable").sortable({
            connectWith: '.connectedSortable',
            forcePlaceholderSize: true,
            update: function(event, ui){
                if(ui.sender){
                    alert(ui.item.attr("nodeName") + "  in block = " + 
                    $(this).parent().attr("id"));
                }
            }
        }).disableSelection(); 

只有当一个项目被移动到另一个 block 时才会提醒父 ID。两个区 block 都会触发该事件,但警报只会显示“非原始”区 block 。

如果您使用 AJAX 更新数据库中的信息,我怀疑您想要的是为两个 block 触发的事件:

一次用于现在缺少元素的“原始”,一次用于现在获得元素的"new"。

我不太熟悉您在做什么或 jQuery UI,所以我不能说得更具体。请记住,文档是您的 friend 。

希望这对您有所帮助。

关于php - 如何在使用 Jquery sortable 排序后检索父容器 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2585949/

相关文章:

javascript - 特定容易猜到的模式的 RegEx 验证

javascript - 生成动态 JSON 对象

javascript - 如何让导航栏出现在滚动条上?

php - 通过 SoapClient 连接到 eBay Trading API 抛出 'The web service eBayAPI is not properly configured or not found and is disabled' 异常

php - 如何序列化依赖于 guzzle 6 客户端的对象?

php - jQuery FileTree 无法读取本地共享文件夹?

javascript - 使用基于id的Angular JS合并数组中的多个对象

javascript - 使用 Javascript 隐藏表格行

javascript - Drupal 的 Lightbox2 似乎不适用于通过 javascript 插入的内容

javascript - 在 iframe 中加载 facebook 弹出聊天.. Chrome 扩展