2011-02-24 3 views
3

Est-il possible de définir un événement sur une entrée qui est déclenchée dans ces circonstances.jquery définir ses propres événements?

 
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 

Comme vous pouvez le voir, l'événement en a pas mal. Je ne peux pas utiliser setTimeout normal dans l'événement de flou parce que l'utilisateur pourrait être assis sur la liste de saisie semi-automatique sans réellement sélectionner quoi que ce soit.

Peut-être que je pourrais définir une variable sur la saisie semi-automatique ouverte afin que nous sachions qu'il est toujours ouvert.
Si le temporisateur expire et que la saisie semi-automatique est toujours ouverte, nous pouvons réinitialiser le temporisateur.
puis, à la fermeture, nous pouvons désactiver la variable.
ou sur sélectionner un élément que nous pouvons désactiver le minuteur?

Qu'en pensez-vous?

Répondre

5

Il est possible de déclencher vos propres événements en utilisant la fonction Trigger. Cela signifie que vous pouvez appeler l'événement à des points distincts de votre code, vous n'avez donc pas besoin d'écrire des constructions compliquées.

Appelez simplement comme ceci: $('.yourClass').trigger('myEvent');

Lier à cet événement peut être fait par .bind(), par exemple. $('.yourClass').bind('myEvent', function() { });

0

vous pouvez utiliser le fling plugin pour déclencher des événements personnalisés et joindre des écouteurs pour eux. Le code ressemblera à quelque chose comme:

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

Pour joindre un auditeur:

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