javascript - 排序功能删除了 jQuery 单击操作

标签 javascript jquery sorting onclicklistener

我有一个函数,包括以下代码:

$(list).append(item);
$(list).html(
    $(list).children("li").sort(function (a, b) {
      return $(a).val() - $(b).val();
    }));
$(item).click(this.listClick);

(基本上,它是从项目数组创建 <ul> <li> ,包括单击任何列表项时触发的 listClick 函数,然后根据 li value 对列表进行排序)。

如果我去掉 sort从脚本中运行函数,然后它就可以正常工作(例如,列表已编译,单击功能可以完美运行,尽管顺序不正确)。但是,如果我对列表进行排序,它会删除单击功能(即单击项目不会执行 listClick 功能)。

为什么这个被删除了?我将排序函数放在 listClick 之前还是之后似乎并不重要已添加行。

最佳答案

这可能是因为您使用的是 html 方法,该方法替换了元素的 html 内容,与 sort 方法无关。旧元素及其附加的事件处理程序也被删除。您应该使用事件委托(delegate)或更好地使用 appendTo 而不是 html:

 $(list).children("li").sort(function (a, b) {
      return $(a).text() - $(b).text();
 }).appendTo(list);

由于 appendTo移动元素,因此事件处理程序将被保留。

另请注意,li 元素没有 value 属性,因此 .val() 方法返回 undefined > 值(value)。您应该使用 text 方法来获取元素的 textContent 。如果 list 已经是一个 jQuery 对象,则无需使用 jQuery 构造函数包装它。

关于javascript - 排序功能删除了 jQuery 单击操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29392251/

相关文章:

javascript - 如何操作JSON数据?

python - Pandas groupby 在保留多个聚合的组内排序

c# - 多维数组列排序

javascript - $.fancybox.delay 不是一个函数

javascript - 在</body>前添加JS标签

iphone - NSArray 排序和隔离

javascript - 我必须如何更改我的代码?

javascript - 使用回调在数组项上链接多个异步函数的正确方法

javascript - 如何使用 json 函数用数据库填充组合框?

javascript - 统计<label>元素在页面中出现的次数