【问题标题】:Get array of IDs after jQuery UI Sortable在jQuery UI Sortable之后获取ID数组
【发布时间】:2013-12-01 22:04:12
【问题描述】:

我正在使用 jQuery UI 可拖动和可排序的功能,我是新手。 我在左侧有项目列表(从数据库生成),右侧有框,用户可以在其中拖放它们。 删除用户时/之后可以对它们进行排序。

这里是完整预览:http://jsbin.com/oBeXiko/3

问题:排序后如何获取每个框中元素的 ID 数组?

我试过 .sortable("toArray") 和 sortable("serialize") 但都返回空字符串。

简单的 HTML

<div id="raspored">  
      <div class="left">
        <ul id="kanta">Delete</ul>    
        <ul id="lista_predmeta" class="droptrue">
          <li class="predmet ui-state-default" predmet-id="id_1">Item_1</li>
          <li class="predmet ui-state-default" predmet-id="id_2">Item_2</li>
          <li class="predmet ui-state-default" predmet-id="id_3">Item_3</li>
          <li class="predmet ui-state-default" predmet-id="id_4">Item_4</li>
        </ul>
      </div>
      <div class="right">     
        <ul class="raspored" razred="1">I</ul>  
        <ul class="raspored" razred="2">II</ul>  
        <ul class="raspored" razred="3">III</ul>  
        <ul class="raspored" razred="4">IV</ul>  
      </div>  
  </div> 

我的 jQuery 函数

$(document).ready(function() {
     var url = "";
     var raz = 0;

    $( ".raspored" ).sortable({
        cursor: 'move',
        opacity: 0.65,
        stop: function ( event, ui){
            var data = $(this).sortable('toArray');
            console.log(data); // This should print array of IDs, but returns empty string/array
       }
    });

    $(".raspored").droppable({
         accept: ".predmet",   
         drop: function(event, ui){
            ui.draggable.removeClass("predmet");
            ui.draggable.addClass("cas");
            raz = $(this).attr("razred");
         }
    });


    $(".predmet").draggable({
        connectToSortable:".raspored",
        helper: "clone",
        revert: "invalid",

        stop: function(event, ui){
                var predmet = $(this).attr("predmet-id") ;
                console.log( "PredmetID = " + predmet + " | RazredID = " + raz);
        }
    });

    $("#kanta").droppable({
        accept: ".cas",
        drop: function(event, ui){
            ui.draggable.remove();
        }
    });

    $( ".raspored, .predmet, .cas, #kanta, #lista_predmeta" ).disableSelection();
  });

【问题讨论】:

    标签: javascript jquery html jquery-ui


    【解决方案1】:

    使用对我有用的序列化。以下是可能对您有所帮助的示例代码。

    <ul id="sortable">
    <li id="ID_11" class="ui-state-default">sai</li>
    <li id="ID_21" class="ui-state-default">2</li>
    <li id="ID_3" class="ui-state-default">3</li>
    <li id="ID_4" class="ui-state-default">4</li>
    <li id="ID_5" class="ui-state-default">5</li>
    <li id="ID_6" class="ui-state-default">6</li>
    <li id="ID_7" class="ui-state-default">7</li>
    <li id="ID_8" class="ui-state-default">8</li>
    <li id="ID_9" class="ui-state-default">9</li>
    <li id="ID_10" class="ui-state-default">10</li>
    <li id="ID_11" class="ui-state-default">11</li>
    <li id="ID_12"  class="ui-state-default">12</li>
    </ul>
     <a href="javascript:void(0);" onClick="saveDisplayChanges();">Save</a>
     <span id="categorysavemessage"></span>
    

    Javascript 代码是:

    <script>
       $(function() {
       $( "#sortable" ).sortable();
    });
    
    function saveDisplayChanges()
    {
      var order =  $("ul#sortable").sortable("serialize");
      var a = "hello";
      var b = "hi";
      $.post("update_displayorder.php?"+order+"&a=hello"+"&b=developer",{abc:a,xyz:b},function(theResponse){
      $("#categorysavemessage").html(theResponse);
    
    });
    }
    </script>
    

    用于获取带有其他信息的订单数据的 PHP 脚本 update_displayorder.php 脚本是:

    <?php
    echo "<pre>";
    print_r($_REQUEST); 
    
    $newOrder = $_POST['ID'];
    $counter = 1;
    foreach ($newOrder as $recordIDValue) {
       echo $counter .' '. $recordIDValue .'<br/>';
       $counter ++;
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      当您调用toArray 时,您可以传递一个带有attribute 字段的选项对象。这个attribute 字段定义了toArray 调用中使用的属性。例如:

      var data = $(this).sortable('toArray', { attribute: 'predmet-id' });
      

      这将为您提供项目的predmet-id 属性数组。见toArraydocumentation

      请注意,默认 attributeid,这就是您的数组之前返回空字符串的原因 - 您的元素都没有 id 属性!

      【讨论】:

      • 实际上,当我试图弄清楚时,我将它们作为 ID,然后我尝试使用自定义 ID 并使用 prop(customID) 获取它们。这就像一个魅力!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多