Chrome バージョン 21.0.1180.89 を使用しています
i.hide()
と callという入力があります.blur()
。ぼかしイベントが発生しても、入力は実際にはフォーカスを失っていません。
これは文書化された動作ですか? 良い回避策はありますか?
ユーザーがEnterキーを押すか、フィールドがフォーカスを失ったときにテキストフィールドのデータを保存するバックボーンアプリを構築しています。TodoMC バックボーンのデモと同じです。
しかし、テンプレートが変更されるたびにテンプレートから要素全体を再構築するため、彼らはそれを回避します。CSSトランジションが壊れるので、私はそれをしたくありません。
編集:
関連するバックボーン コードのほとんど:
var app = app || {};
$(function() {
'use strict';
// Todo Item View
// --------------
// The DOM element for a todo item...
app.TodoView = Backbone.View.extend({
//... is a list tag.
tagName: 'li',
// Cache the template function for a single item.
template: _.template( $('#item-template').html() ),
// The DOM events specific to an item.
events: {
'click .toggle': 'togglecompleted',
'dblclick label': 'edit',
'click .destroy': 'clear',
'keypress .edit': 'updateOnEnter',
'blur .edit': 'close'
},
// Switch this view into `"editing"` mode, displaying the input field.
edit: function() {
this.$el.addClass('editing');
this.input.focus();
},
// Close the `"editing"` mode, saving changes to the todo.
close: function() {
var value = this.input.val().trim();
if ( value ) {
this.model.save({ title: value });
} else {
this.clear();
}
this.$el.removeClass('editing');
this.$el.addClass('syncing');
},
// If you hit `enter`, we're through editing the item.
updateOnEnter: function( e ) {
if ( e.which === ENTER_KEY ) {
// Stupid hack to trigger a blur only once.
this.$el.append(this.input.detach());
// this.close();
}
},
// Remove the item, destroy the model from *localStorage* and delete its view.
clear: function() {
this.model.destroy({wait: true});
this.$el.addClass('deleting');
this.$el.addClass('syncing');
}
});
});