Joindre gestionnaire d'événement de bouton twitter bootstrap liste
Je suis en utilisant le twitter bootstrap popovers,
Dans la liste je suis l'ajout d'un bouton,
J'ai besoin de joindre un click
gestionnaire du bouton,
mais la façon la liste des œuvres est à chaque fois il la supprime et recrée l'élément, au lieu de simplement montrer/cacher, d'où la suppression des gestionnaires d'événements que j'ai associé avec ledit bouton.
Je suis la création de plusieurs popovers toutes avec leur propre version de la touche, il suffit donc d'appliquer une classe à la liste ne fonctionne pas (à moins que je créer une classe différente pour chacun d'eux :/), le bouton peut ou ne peut pas disposer de sa propre carte d'identité, ne peut pas appliquer un ID.
Comment puis-je appliquer un gestionnaire d'événement pour quelque chose dans le contenu de twitter bootstrap liste?
- Vous avez deux options. #1: re-lier après la liste s'ouvre, ou #2 le lier à l'aide de cas de délégation. A quoi sert le bouton faire?
- Beaucoup de choses différentes, certains soumettre des formulaires (via js), certains simplement fermer la fenêtre pop-over,
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème, et, dans mon cas, le
$(body).on('click')
solution de contournement ne fonctionne pas, depuis que la demande a lotta cliquez sur les boutons.Je n'ai la suite à la place. De cette façon, nous pouvons limiter la portée de l'événement délégué à juste le parent de l'élément de liste.
JS Fiddle: http://jsfiddle.net/dashk/5Yz7z/
P. S. j'ai utilisé cette technique au sein d'une
Backbone.View
dans mon application. Voici l'extrait du code de Violon, dans le cas où vous êtes en utilisant ce dansBackbone.js
ainsi...: http://jsfiddle.net/dashk/PA6wY/ÉDITÉ
Dans le Bootstrap 2.3, vous pouvez spécifier un conteneur cible qui liste sera ajouté. Maintenant, au lieu de faire de la .parent() de localisation, vous pouvez également écouter des événements spécifiquement pour le conteneur... Cela peut rendre l'auditeur encore plus spécifiques (Imaginer de créer une DIV qui existe uniquement pour contenir la liste.)
Cela devrait le faire. Cela va prendre soin de tous les actuels et futurs bouton éléments créés à l'intérieur d'un élément avec l' .liste classe:
Juste à un peu de mise à jour DashK's très bonne réponse: .délégué() a été remplacée par .sur() de jQuery 1.7 (voir ici).
Voir jsfiddle ici: http://jsfiddle.net/smingers/nCKxs/2/
J'ai aussi eu quelques problèmes avec le chaînage de l' .sur() la méthode de $("une.foo'); si vous rencontrez un tel problème, essayez de l'ajouter au document, le corps, ou html, par exemple:
$('a.foo').popover({ html: true, title: 'Hello', placement: 'bottom', content: '<button id="close-me">Close Me!</button>' }).parents('body').on('click','button#close-me',function(){ console.log('Popover button clicked!'); });
Solution très simple qui a fonctionné pour moi est:
Pourquoi cela fonctionne:
Fondamentalement, liste du contenu n'a pas d'écouteur jusqu'à ce que la liste est ouverte.
Lorsque la liste est affichée, bootstrap feux de son événement
shown.bs.popover
. Nous pouvons associer un gestionnaire d'événement sur cet événement pour$(a.foo)
à l'aide de jQueryon
méthode. Donc, lorsque la liste est affiché, le gestionnaire (rappel) la fonction est appelée. Dans cette fonction de rappel, nous pouvons joindre les gestionnaires d'événements pour le contenu de la liste - par exemple: ce qui se passe lorsque l'utilisateur clique sur ce bouton à l'intérieur de la liste.Après la liste est fermée, c'est une bonne idée de supprimer tous les gestionnaires de la liste du contenu. Cela se fait via
hidden.bs.popover
gestionnaire, qui supprime les gestionnaires avec jQuery.off
méthode. Cela empêche les gestionnaires d'événements à l'intérieur de la liste à être appelé deux fois (et plus) lorsque la liste est à nouveau ouvert...Vous pouvez avoir des ennuis si vous ajoutez de structure plus complexe dans la liste du contenu, par exemple un composant externe. Pour ce cas, cela devrait faire l'affaire.
essayer cette
Si les données attributs sont définis dans la page html statique la méthode ci-dessus fonctionne très bien. Merci 🙂