【问题标题】:Click event handler slow in Google Chrome and other WebKit browsers在 Google Chrome 和其他 WebKit 浏览器中单击事件处理程序很慢
【发布时间】:2011-06-23 04:19:51
【问题描述】:

使用 jQuery UI 创建一个替代的可选对象,显示为具有超过三千个元素的层次结构。

基本上,使用 jQuery 1.6.1,除了来自 jQuery UI 的 CSS

<style type="text/css">
    .selectable,
    .selectable li
    {
        moz-user-select: none;
        -khtml-user-select: none;
        -webkit-user-select: none;
        user-select: none;
    }
</style>
<script type="text/javascript">
    $(function () {
       $('.seletable li').click(function () { alert('hullo') });
    });
</script>

在体内

<ol class="seletable">
  <li style="margin-left: {calculated according to the current level in hierarchy}">...</li>
  ...
</ol>

有序列表当然会有 3k + 列表元素。

在加载页面并单击和元素时,警告框在 Google Chrome 和其他 WebKit 浏览器(如 Safari)中似乎显着延迟一到两秒,但在其他浏览器(如 IE、Firefox 和 Opera)中正常运行。

【问题讨论】:

  • 没关系,与-webkit-user-select有关:无;使用 用于 WebKit 浏览器。谢谢。

标签: javascript jquery google-chrome webkit click


【解决方案1】:

您是否将.click() 事件提供给同一个&lt;ol&gt; 中的3000 多个元素?

我希望不是这样,因为您可以只给&lt;ol&gt; 一个点击事件,然后停下来,查找每次生成事件的人。如果你这样做了,那也可能是放缓的原因。特别是在 IE 中,许多事件侦听器都被杀死了。

有点像

$( '<ol>' ).click( function(e) {

    // Here, e.target gives you the real element who was clicked

});

【讨论】:

  • 好主意。两种方式都尝试过,并同意您的解决方案产生最佳性能。最后,它删除了 -webkit-user-select: none 解决了这个问题。因为即使在单个元素上注册点击处理程序也会导致同样的问题。必须是 WebKit 的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多