Медленный обработчик кликов в Google Chrome и других браузерах WebKit - PullRequest
1 голос
/ 23 июня 2011

Использование пользовательского интерфейса jQuery для создания альтернативного выбора, отображаемого в виде иерархии с более чем тремя тысячами элементов.

В основном, используя jQuery 1.6.1, CSS из jQuery UI в дополнение к

<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.

1 Ответ

1 голос
/ 23 июня 2011

Предоставляете ли вы событие .click() более чем 3000 элементам в одном и том же <ol>?

Надеюсь, что это не так, поскольку вы можете просто присвоить одно событие щелчка для <ol> и остановить, находя, кто генерировал событие каждый раз.Если вам это нравится, это также может быть причиной замедления.Особенно в IE многие слушатели событий убиваются.

Что-то вроде

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

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

});
...