Backbone.js focus événement se déclenche deux événements focus et focusin
Le point de vue d'une partie de mon code à l'aide de Backbone.js c'est quelque chose comme ceci:
var myView = Backbone.View.extend({
events: {
'focus .cell input' : "updateCurrentCell"
},
updateCurrentCell: function(event) {
console.log('updateCurrentCell called');
//Update the current cell.
}
}
Chaque fois que l'élément d'entrée est activé, la fonction est appelée deux fois. J'ai essayé de l'impression de la trace de la pile à l'aide de console.trace()
. Il montre qu'une fois l'appel de la fonction originaire de l'accent de l'événement, tandis que la prochaine fois de focusin.
De mes tentatives de trouver des moyens pour prévenir l'un de ces événements se faire licencier me mènent nulle part.
Comment puis-je résoudre ce problème?
OriginalL'auteur viky | 2011-08-10
Vous devez vous connecter pour publier un commentaire.
De la colonne vertébrale.Vue utilise delegateEvents de lier les événements répertoriés dans vos événements de l'objet. Si vous jetez un oeil à la source, vous verrez que
delegateEvents
utilise jQuery.délégué de le faire.Il y a une note dans le jquery docs pour .focus() c'est sans doute pertinente:
En théorie, cela devrait fonctionner très bien, mais puisque vous êtes deux, vous pourriez peut-être essayer de simplement écouter de la .focusin() événement, comme il prend en charge le type de remontée d'événements .délégué() écoute et est ce que jQuery est d'essayer de carte "focus" de toute façon.
focus()
. Je doute que cela pourrait être un problème de la colonne vertébrale, pas jquery. Est focusin un événement standard, pris en charge par tous les navigateurs?J'ai fait une recherche rapide, et ne pouvait pas trouver quelque chose à suggérer qu'il ne l'est pas. Plus important encore, jQuery est en charge des navigateurs, et si c'est le mappage de se concentrer à focusin, je ne vois pas de raison de ne pas l'utiliser.
focusin n'est pas pris en charge dans firefox, voir:
OriginalL'auteur satchmorun