javascript - 如何在ajax调用过滤后使项目可拖动

标签 javascript php jquery ajax jquery-ui

所以我得到了一个可拖动的名称列表。我有一个复选框列表,可以帮助他们过滤这些名称。选中复选框后,我进行 ajax 调用。这是我的列表的样子(它是一个 Accordion ):

        <div id="myAccordion">
        <?php
                echo "<h3>Names</h3>";  
                echo '<ul class="source">';
                echo '<div id="getData"></div>';    
                echo '<div id="hideData">'; 
                $sql = "SELECT * FROM user ORDER BY `username` ASC ";
                $result = $conn->query($sql);       
                if ($result->num_rows > 0) 
                {
                    // output data of each row
                    while($row = $result->fetch_assoc()) 
                    {  
                        $name = $row["username"];
                        $user_type = $row["user_type"];
                        echo"<li class='item'><span class='closer'>x</span>".$name."</li>";                     
                    }
                    }
                    else 
                    {
                        echo "0 results";
                    }   
                echo '</div>';                      
                echo '</ul>';
        ?>  
        </div>

因此,在调用 ajax 后,我调用 filter.php 并打印该内容:

<?php
require_once('inc/database_connection.php');
include 'model/model.project.php';
if($_POST['user_type'])
{
    //unserialize to jquery serialize variable value
    $type=array();

    parse_str($_POST['user_type'],$type); //changing string into array 

    //split 1st array elements
    foreach($type as $ids)
    {
        $ids;
    }
    $types=implode("','",$ids); //change into comma separated value to sub array
    echo "<br>";
    $result = getUserTypeChecked($types);
?>
    <div id="getData">
    <?php 
    while($rows=mysqli_fetch_array($result))
    {                   
        //echo $rows['username']."<br>";  
        $name = $rows["username"];
        echo '<ul id="source">';
        echo"<li class='item'><span class='closer'>x</span>".$name."<div class='green'></div></li>";    
        echo '</ul>';

    }       
    ?>  
    </div>
<?php
}
?>

所以问题是 ajax 调用后名称不再可拖动。我怎样才能实现这个目标?

编辑

好的,这是我的 Accordion js:

<script>
    $("#myAccordion").accordion({heightStyle:"content", collapsible:true});
    $("#myAccordion li ").draggable({
        appendTo: "body",
        helper: "clone",
         refreshPositions: true,
         start: function (event, ui) {
            sourceElement = $(this);
        },          
    });
</script>

和 ajax 调用:

<script>
$(document).ready(function(){
    //$('#getData').hide();
    $('.ids').on('change',function(){ //on checkboxes check
        //sending checkbox value into serialize form
        var hi=$('.ids:checked').serialize();
        if(hi){
            $.ajax({
                type: "POST",
                cache: false,
                url: "filter.php",
                data:{user_type:hi},
                success: function(response){
                    //$('#getData').show();
                    document.getElementById('getData').style.display = "block";
                    document.getElementById("getData").innerHTML = response;
                    $('#hideData').hide();
                }
            });
        }
        else
        {
            document.getElementById('getData').style.display = "none";
            $('#hideData').show();
        }
    });
});
</script>

最佳答案

JS 与页面上加载的 DOM 一起工作。这意味着当您调用排序函数时,页面上必须存在 HTML 元素。

让我们尝试了解这里发生了什么?

  • 首先加载所有 html 元素。
  • JS 触发器和所有拖动功能到加载的 DOM。
  • 调用 Ajax 来获取新数据并替换旧 DOM。
  • 现在拖动功能停止工作。
  • 为什么?因为JS拖动功能运行在旧的DOM上,目前已被删除。
  • 需要在新加载的 DOM 上再次调用拖动函数。

注意:确保在调用 JS 拖动函数之前必须加载元素或 HTML。

关于javascript - 如何在ajax调用过滤后使项目可拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41219373/

相关文章:

javascript - AngularJS 将 $routeParam 存储在工厂服务的 var 中

javascript - 如何安全地连接到另一台服务器上的 MySQL 数据库?

为输出流打开编码器时出现 PHP-FFMpeg 错误

JavaScript/jQuery 根据公共(public)属性选择多个项目,并将它们作为由分隔符分隔的字符串传递给 JavaBean

jquery - 响应式 div 列,其中列元素在屏幕调整大小时移动

Javascript window.atob -> HEX - 结果与预期不同

javascript - 如何限制用户应根据下拉响应为文本字段赋值?

php - 从 Magento 产品 View 中的可配置产品中获取所有简单产品

php - Eloquent hasOne 关系即使存在相关记录也返回 NULL

javascript - 两个 div 并排占据整个容器区域并处理调整大小事件