Как я не могу реагировать на событие размытия при выборе автозаполнения YUI

Я пытаюсь по-разному реагировать на события onBlur и onSelect с автозаполнением YUI. Мне нужно скрыть AC, когда пользователь щелкает где-то еще и оставить его там на выбор. Проблема в том, что событие размытия запускается также и при выборе. Я не смог найти событие, которое вызывается только при нажатии за пределами AC, и я действительно застрял, ловя событие размытия каким-то образом в случае выбора, так как оно срабатывает перед событием select.

Так что, в основном, я хочу получить такой вывод:

щелкните за пределами ac: BLUR

выберите значение: SELECT val

Но то, что я получаю, это:

щелкните за пределами ac: BLUR

выберите значение: BLUR, SELECT val

Что приводит к скрытому AC при выборе.

1 ответ

Решение

Так как событие размытия срабатывает, когда вы выбираете что-то, и, скорее всего, вы не сможете этого предотвратить, для размытия установите тайм-аут. Если таймер истекает, делайте то, что вы обычно делаете на размытии.

В случае выбора отмените таймер.

Какой-то очень свободный псевдокод:

var blurTimer = null;

function handleBlur() {
    blurTimer = setTimeout(function() {
        // do what you normally do onblur
    }, 50);
}

function handleSelect() {
    clearTimeout(blurTimer);

    // do what you normaly do on select
}
Другие вопросы по тегам