Backbone.js focus-Ereignis feuert zwei Ereignisse konzentrieren und focusin
Den view-Teil von meinem code verwenden Backbone.js so etwas wie dieses:
var myView = Backbone.View.extend({
events: {
'focus .cell input' : "updateCurrentCell"
},
updateCurrentCell: function(event) {
console.log('updateCurrentCell called');
//Update the current cell.
}
}
Wenn das input-element den Fokus erhält, wird die Funktion zweimal aufgerufen. Ich habe versucht, drucken Sie den stack-trace mit console.trace()
. Es zeigt, dass, sobald Sie die Funktion aufrufen, stammt aus Fokus Ereignis während der nächsten Zeit von focusin.
Meine versuche heraus zu finden, wie Sie verhindern, dass eines dieser Ereignisse gefeuert zu werden, führen mich nirgendwo.
Wie kann ich dieses Problem beheben?
InformationsquelleAutor viky | 2011-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rückgrat.- Ansicht verwendet delegateEvents zu binden, die Ereignisse in Ihren Event-Objekt. Wenn Sie einen Blick auf die Quelle, wirst du sehen, dass
delegateEvents
verwendet jQuery.delegieren zu tun.Gibt es einen Hinweis in der jquery-Dokumentation für .Fokus() das ist wohl relevant:
In der Theorie sollte diese nur gut funktionieren, aber da bist du immer beide, vielleicht könnten Sie versuchen, einfach nur Zuhören, für die .focusin() Fall, wie es unterstützt die Art von Ereignis-bubbling .delegate() überwacht und ist das, was jQuery versucht, Karte 'focus' eh.
focus()
. Ich bezweifelte, es könnte sich um ein Problem im Backbone, jquery nicht. Ist focusin eine standard-Veranstaltung, die von allen Browsern unterstützt?Ich habe eine schnelle Suche und konnte nichts finden zu behaupten, dass es nicht so ist. Noch wichtiger ist, die jQuery-Zweck ist cross-browser-Unterstützung, und wenn es die mapping-Fokus auf focusin, ich sehe keinen Grund, es nicht zu verwenden.
focusin wird in firefox nicht unterstützt siehe:
InformationsquelleAutor satchmorun