JQuery определить собственные события? - PullRequest
3 голосов
/ 24 февраля 2011

Можно ли определить событие на входе, которое срабатывает при этих обстоятельствах.

a) is called on blur of input IF the remaining conditions are true
b) if the autocomplete list is visible halt the event until it is closed
c) if the autocomplete list closes without an item being selected then the event is fired
d) if the autocomplete list closes with an item being selected the event is not fired
e) if the reason the blur was caused was because an item in the autocomplete was clicked the event is not fired

Как вы видите, событие имеет немало общего. Я не могу использовать обычный setTimeout в событии размытия, потому что пользователь может сидеть в списке автозаполнения, фактически ничего не выбирая.

Возможно, я мог бы установить переменную при открытии автозаполнения, чтобы мы знали, что она все еще открыта.
если таймер истекает, а автозаполнение все еще открыто, мы можем сбросить таймер.
затем при закрытии мы можем сбросить переменную.
или при выборе элемента мы можем сбросить таймер?

Что ты думаешь?

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

Можно запускать собственные события, используя функцию Trigger . Это означает, что вы можете вызывать событие в отдельных точках кода, поэтому вам не нужно писать сложные конструкции.

Просто позвоните так: $('.yourClass').trigger('myEvent');

Ссылка на это событие может быть сделана через .bind(), т.е. $('.yourClass').bind('myEvent', function () { });

0 голосов
/ 24 февраля 2011

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

$(yourinput).blur(function(){
    if(....your condition....)
        $.fling('publish','YourEventName',your data in json);
}

Чтобы прикрепить слушателя:

 $.fling('subscribe','YourEventName', function(){
 });
...