(现在重写问题更具体)
我有一个可排序的列表,当我有手册' 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
由于
答案 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。