我在这里找到了一个很好的重新排序列表项的方法。
$(".reOrder li").click(function() {
var index = $(".reOrder li").index(this);
if (index != 0) {
// li item is not sitting in the first position
$(".reOrder li:eq(" + (index - 1) + ")").before(this);
}
});问题是,我有通过jQuery的append方法添加到UL的LI项,而点击似乎没有为这些项注册。Here's a simplified fiddle showing what I mean。请注意原始列表项是如何正常工作的,但如果您添加了一个列表项,则单击该列表项将不起作用。
我甚至尝试了一个简单的点击提醒,所以它没有得到点击事件。我需要如何更改我的代码才能使其工作?
发布于 2013-05-06 04:51:52
您的示例代码使用了一个类,实际上,它是一个ID,但我猜您知道这一点。
与代码中的事件处理程序一样,事件处理程序只对绑定事件时存在于页面上的元素起作用。在添加元素时,这些元素是动态的,您需要一个委托的事件处理程序,其中事件被绑定到非动态的父级,并检查第二个选择器,在本例中为li:
$(".reOrder").on('click', 'li', function() {
var index = $(".reOrder li").index(this);
if (index != 0) {
// li item is not sitting in the first position
$(".reOrder li:eq(" + (index - 1) + ")").before(this);
}
});这在你的小提琴中使用的jQuery 1.4版本中不起作用,你应该升级到新版本。
发布于 2013-05-06 05:03:59
根据jQuery文档
> Event handlers are bound only to the currently selected elements; they must exist on the page at the time your code makes the call to .on().
同时也要注意你在小提琴上使用的jQuery的版本(1.4.2没有.on() )。最好是使用委托
http://api.jquery.com/delegate/
根据jQuery文档
Deletegate()描述:基于一组特定的根元素,将一个处理程序附加到与选择器匹配的所有元素的一个或多个事件。
或者,您可以尝试不附加到li项的click事件,而是附加到父ul (总是在那里),然后测试目标(即单击了哪个li )。
https://stackoverflow.com/questions/16388986
复制相似问题