jQuery sortable issue = Uncaught TypeError:undefined不是函数

时间:2015-04-12 18:10:36

标签: javascript jquery

(现在重写问题更具体)

我有一个可排序的列表,当我有手册' li'创建的项目。然后,我停止手动创建项目,因为它们应该来自服务器端。但是一旦我开始通过jquery填充li项目,分类功能就停止了。

<section>
    <div class="taskcontainer">
        <h1>alpha</h1>
        <ul id="sortable1" class="connected sortable list">
<!-- <li class="list-group-item">This worked perfectly before</li> -->
        </ul>
    </div>      
</section>

<script>
$('.sortable').sortable();

$(function() {                       //run when the DOM is ready
  $(".list-group-item").click(function() {  //use a class, since your ID gets mangled
    $(this).addClass("completed");      //add the class to the clicked element
  });
});

</script>

<script>
function getTasks()
{
    var jsontasks = jQuery.parseJSON('<%=raw(@jsontasks)%>');
    $.each(jsontasks, function(index, element) {
        $("#sortable1").append("<li class='list-group-item'>" + element.name + "</li>");

    }); 

    $('.sortable').sortable();

}   
</script>

现在,当我运行getTasks函数时,li项会正确填充。但是可排序的功能无法触发。浏览器返回错误:

未捕获的TypeError:undefined不是函数

无论如何,无法从getTasks函数中访问可排序的功能。

以下是完整代码: http://pastebin.com/wbdNLC9f

由于

2 个答案:

答案 0 :(得分:3)

我只能建议你需要更新你的jQuery UI代码。类似的代码有效:

$('.sortable').sortable();

function getTasks() {
    var jsontasks = {
        "name1": { name: "geoff"},
        "name2": { name: "mark"},
        "name3": { name: "lucy"},
        "name4": { name: "richard"},
        "name5": { name: "amelia"},
        "name6": { name: "james"},
        "name7": { name: "ronald"}
    }
    $.each(jsontasks, function (index, element) {
        $("#sortable1").append("<li class='list-group-item'>" + element.name + "</li>");

    });

    $('.sortable').sortable();

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>

<section>
  <div class="taskcontainer">
    <h1>alpha</h1>

    <ul id="sortable1" class="connected sortable list"></ul>
  </div>
  <button onclick="getTasks();">Sortable</button>
</section>

由于Google Chrome中的代码段似乎已被破坏(似乎是Stack Overflow问题,但在Firefox中有效),这是我用来测试它的Fiddle

答案 1 :(得分:1)

将所有元素添加到列表后尝试调用sortable。