我编写了一个自定义绑定处理程序,用于切换元素是否为 contentEditable。我还希望在编辑元素的内容时更新任何 html 绑定,因此它会侦听输入事件并更新 html 绑定(如果可用)。
ko.bindingHandlers.contentEditable = {
update: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.unwrap(valueAccessor());
element.contentEditable = value;
var $element = $(element);
if (value) {
var allBindings = allBindingsAccessor();
var htmlBinding = allBindings.html;
if (ko.isWriteableObservable(htmlBinding)) {
$element.on("input", function (event) {
htmlBinding(element.innerHTML);
});
}
} else {
$element.off("input");
}
}
};
但是,这里有问题:
- 用户在元素中输入一些东西
- 触发输入事件
- html绑定已更新
- 元素的 innerHTML 已更新
- 元素中的光标位置回到开头
一个 jsfiddle 说一千个字... http://jsfiddle.net/93eEr/1/
我对如何处理这个问题感到有些困惑。