我编写了一个自定义绑定处理程序,用于切换元素是否为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
- 光标在元素中的位置返回到开头
一把小提琴能说一千句话
我不知道该怎么处理这事。
3条答案
按热度按时间ohfgkhjo1#
第一个
以最小的更改完成此操作。请参阅http://jsfiddle.net/93eEr/3/
您可以将绑定处理程序命名为
htmlEditable
,也许这比将其命名为“lazy”更好。注意,“input”事件并不需要每次都被绑定。当元素不可满足时,它不会触发。
e0bqpujr2#
@Tomalak的回答很完美,因此我投了赞成票。
但是对于那些来到这里的人,比如我自己:
value:
风格的更新(即:在模糊上)我的建议如下:
wz1wpwve3#
在以前我有问题的bdo解决它的这个代码.也这个代码是可用的其他contentEditable.所以我建议如下: