爲什麼在這個例子中http://jsfiddle.net/JksKx/8/ div在我寫文本時丟失了光標?如何解決這種行爲?敲除內容可編輯自定義綁定
6
A
回答
15
keyup事件觸發並寫入您的viewmodel,然後觸發自定義綁定的更新函數。這會將innerHTML寫回元素,這會導致您失去焦點。
一個簡單的解決方法是檢查更新函數,如果element.innerHTML已經與您想要設置的值相同。
http://jsfiddle.net/rniemeyer/JksKx/9/
ko.bindingHandlers.htmlValue = {
init: function(element, valueAccessor, allBindingsAccessor) {
ko.utils.registerEventHandler(element, "keydown", function() {
var modelValue = valueAccessor();
var elementValue = element.innerHTML;
if (ko.isWriteableObservable(modelValue)) {
modelValue(elementValue);
}
else { //handle non-observable one-way binding
var allBindings = allBindingsAccessor();
if (allBindings['_ko_property_writers'] && allBindings['_ko_property_writers'].htmlValue) allBindings['_ko_property_writers'].htmlValue(elementValue);
}
}
)
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()) || "";
if (element.innerHTML !== value) {
element.innerHTML = value;
}
}
};
3
可能要更改的keydown到KEYUP,但比其他的作品真的很好=)
ko.utils.registerEventHandler(element, "keyup", function() {
相關問題
- 1. 使用我的自定義函數敲除自定義綁定
- 2. froala的自定義敲除綁定使編輯器鬆動對焦
- 3. 敲除自定義綁定我的綁定在哪裏?
- 4. 敲除綁定
- 5. UITableViewCell自定義編輯內容
- 6. 中編輯自定義綁定
- 7. 敲除自定義驗證
- 8. 當我用自己的自定義綁定敲除「模板」綁定異常
- 9. 敲除js大量的自定義綁定
- 10. 自定義控制不與敲除「與」綁定
- 11. 在對象文字中的自定義敲除綁定
- 12. 自定義敲除綁定來顯示錯誤消息
- 13. 保存wpColorPicker值與敲除自定義綁定
- 14. JQuery Mobile頁面分離+敲除自定義綁定
- 15. 基金會工具提示的自定義綁定在敲除
- 16. 使用敲除來綁定自定義事件
- 17. Durandal:製作自定義敲除綁定模塊
- 18. 按鈕上的敲除自定義綁定
- 19. 基因敲除js bootstrap組合框自定義綁定
- 20. 複合控件的自定義敲除綁定
- 21. 與自定義擴展程序和驗證的敲除綁定
- 22. 實現基於afterRender功能的敲除自定義綁定
- 23. 敲除自定義綁定多次觸發
- 24. 敲除屬性綁定不能用於自定義函數
- 25. 自定義敲除綁定觸發兩次,意外
- 26. 敲除自定義綁定更新功能沒有觸發
- 27. 自定義操作不綁定到自定義內容類型
- 28. Kendo使用自定義編輯器進行內聯編輯不會綁定
- 29. 敲除綁定value.update沒有與自定義綁定和defineProperty調用
- 30. 敲除內部dom元素呈現後調用js自定義綁定
兩件事情,我注意到在這個CONTENTEDITABLE結合:1.確保數據-bind不在具有contenteditable屬性的元素內。具有contenteditable的元素不會觸發關鍵事件。 2.如果用戶右鍵單擊元素並粘貼文本,這將不會更新值。點擊事件也應該被分配。此外,如果使用像「大膽」點擊事件按鈕應綁定到身體或類似的東西。 – 2012-10-26 12:44:49
使用焦點似乎適用於「大膽」點擊事件和其他類似事件。 ko.utils.registerEventHandler(element,「focus」,updateHandler); – Piercy