我正在尝试更新Knockout中条件模糊的输入值 - 基本上我希望元素在特定元素触发模糊时不触发值更新。我知道我可以在文档的每个元素上观看mousedown并确定最后点击的内容,但似乎有点过分。任何人都可以想到的任何其他工作?
<input class="edit" data-bind="value: title, valueUpdate: 'afterkeydown', enterKey: $root.stopEditing, selected: editing, event: { blur: $root.checkEditing }">
我试图实现的解决方案是使用document.activeElement。
self.checkEditing = function( item, event ) {
if (document.activeElement == $('a.cancel')) {
// revert to previous title, aka cancel the editing
item.title(item.previousTitle);
item.editing( false );
} else {
// this will update value with whatever was typed right before the blur
item.editing( false );
if ( !item.title().trim() ) {
self.remove( item );
}
}
};
答案 0 :(得分:1)
看起来要正确捕获触发模糊的元素,必须使用setTimeout。处理模糊后,setTimeout可确保聚焦元素可用。
例如:
输入:
<input class="edit" data-bind="value: title, valueUpdate: 'afterkeydown', selected: editing, event: { blur: $root.checkEditing, click: $root.editItem }">
模糊后检查活动元素的方法:
self.checkEditing = function( item, event ) {
setTimeout(function(){
console.log("The active element is: " + document.activeElement)
// check if the user selected cancel
if ($(document.activeElement).is("a.cancel")) {
// revert to previous title
item.title(item.previousTitle);
}
});
item.editing( false );
if ( !item.title().trim() ) {
self.remove( item );
}
};
完整的小提琴演示如下:http://jsfiddle.net/hUA9v/5/