Препятствуйте тому, чтобы событие щелчка стреляло, когда dblclick событие будет стрелять

Вот функция, которая делает то же самое (за исключением только заглавных букв, но это легко изменить), но использует slice только один раз и является итеративным, а не рекурсивным. В быстром тесте он примерно в 4 раза быстрее (что актуально только в том случае, если вы действительно интенсивно его используете!).

function nextString(str) {
    if (! str)
        return 'A'  // return 'A' if str is empty or null

    let tail = ''
    let i = str.length -1
    let char = str[i]
    // find the index of the first character from the right that is not a 'Z'
    while (char === 'Z' && i > 0) {
        i--
        char = str[i]
        tail = 'A' + tail   // tail contains a string of 'A'
    }
    if (char === 'Z')   // the string was made only of 'Z'
        return 'AA' + tail
    // increment the character that was not a 'Z'
    return str.slice(0, i) + String.fromCharCode(char.charCodeAt(0) + 1) + tail

}

32
задан Brian Tompsett - 汤莱恩 25 August 2019 в 10:03
поделиться

3 ответа

В комментарии вы сказали:

Я откладываю обработчик кликов на 300 мс (заметная и раздражающая задержка) и даже ...

Похоже, вы хотите, чтобы при нажатии DOM немедленно генерировал событие щелчка, за исключением случаев, когда щелчок является первым щелчком двойной щелчок.

Чтобы реализовать эту функцию, когда вы щелкаете, DOM должна быть в состоянии предсказать, будет ли это последний щелчок или это будет s первый двойной щелчок (однако я не думаю, что в целом DOM может предсказать, собирается ли пользователь щелкнуть снова).


Какие два различных действия вы пытаетесь предпринять по щелчку и двойному щелчку? IMO, в обычном приложении вам могут понадобиться оба события: например, одиночный щелчок для фокусировки на элементе, а затем двойной щелчок для его активации.

Когда вы должны разделить события, некоторые приложения используют что-то другое, кроме двойного щелчка: например, они используют щелчок правой кнопкой мыши или щелчок при нажатой клавише Control.

15
ответ дан 27 November 2019 в 20:38
поделиться

В этом случае лучше всего немного отложить выполнение события одиночного щелчка. Попросите обработчика двойного щелчка установить переменную, которую будет проверять событие одиночного щелчка. Если эта переменная имеет определенное значение, может быть boolDoubleClick == true , тогда не запускайте / обрабатывайте одиночный щелчок.

6
ответ дан 27 November 2019 в 20:38
поделиться

AFAIK DOM Level 2 Events не содержит спецификации для двойного щелчка. У меня это не работает в IE7 (шок), но у FF и Opera нет проблем с управлением спецификацией, где я могу прикрепить все действия к событию щелчка, но для двойного щелчка просто подождите, пока атрибут "detail" объекта события - 2. Из документации: «Если в одном и том же месте экрана происходит несколько щелчков мышью, последовательность повторяется с атрибутом подробностей, увеличивающимся с каждым повторением».

3
ответ дан 27 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: