我已经实现了在keyup事件中自动扩展textarea高度的逻辑。但是,我希望textarea在通过敲除自定义绑定将值绑定到textarea时也初始化它的高度。任何解决方案自动增长textarea与淘汰赛js
3
A
回答
3
我强烈建议不要使用事件触发调整大小。相反,您可以使用textInput
绑定来跟踪observable中的输入并订阅其中的更改。
下面是一个例子:
<textarea data-bind="textInput: value, autoResize: value"></textarea>
ko.bindingHandlers.autoResize = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.computed(function() {
ko.unwrap(valueAccessor());
resizeToFitContent(element);
})
}
};
这样做是因为:
- 的
textInput
结合写入任何输入变化到可观察到的value
变量。 computed
使用此值触发调整大小。这会自动创建订阅。
这比方法更好,因为它用的东西涉及像Right Mouse Button > cut
范例显示了event
相当于以及:
var resizeToFitContent = function(el) {
// http://stackoverflow.com/a/995374/3297291
el.style.height = "1px";
el.style.height = el.scrollHeight + "px";
}
ko.bindingHandlers.autoResize = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.computed(function() {
ko.unwrap(valueAccessor());
resizeToFitContent(element);
})
}
};
ko.applyBindings({
value: ko.observable("Test"),
onKey: function(data, event) {
\t resizeToFitContent(event.target);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<textarea data-bind="textInput: value, autoResize: value"></textarea>
<textarea data-bind="event: { keyup: onKey }"></textarea>
0
您可以创建自定义的绑定将应用于autoresize()
所有文字区域(仅利用KnockoutJS的,不使用jQuery或任何其他库):
ko.bindingHandlers.jqAutoresize = {
init: function(element, valueAccessor) {
var options = ko.utils.unwrapObservable(valueAccessor()) || {};
$(element).autoResize(options);
}
};
更新您的看法是这样的:
<div data-bind="foreach: Rows" >
<textarea data-bind="jqAutoresize: {}, value: RowText" ></textarea>
</div>
相关问题
- 1. 与淘汰赛
- 2. 淘汰赛JS建议
- 3. 下钻在淘汰赛JS
- 4. 淘汰赛JS的foreach
- 5. 在淘汰赛的js
- 6. 重新jin对象与淘汰赛js
- 7. jQueryUI datepicker与MVC和淘汰赛js
- 8. 动态记录创造淘汰赛JS
- 9. 淘汰赛JS:装订动态行
- 10. 在淘汰赛
- 11. 淘汰赛JS:foreachBinding
- 12. 淘汰赛datacontext
- 13. 与淘汰赛条件
- 14. 与淘汰赛结合
- 15. 避免与淘汰赛
- 16. 自动勾选或使用淘汰赛
- 17. 动态链接与淘汰赛模板
- 18. 如何在淘汰赛中自动点击按钮js
- 19. 淘汰赛映射和家长选择
- 20. 淘汰赛。长度或.Count之间
- 21. 淘汰赛组件
- 22. 淘汰赛在表
- 23. 淘汰赛的CheckedValue
- 24. 淘汰赛映射分层JS对象
- 25. 嵌套模板结合+淘汰赛JS
- 26. e.stopPropagation()是不是在淘汰赛JS
- 27. 删除淘汰赛JS克隆元素
- 28. 添加项目采用淘汰赛JS
- 29. 淘汰赛js删除不起作用
- 30. 淘汰赛JS观察全局变量
谢谢你这么多的回复我的问题,我是新来淘汰js。它不工作,如何在autoresize()上创建自定义绑定?请介意,如果你可以在JSFiddle中设置它,请问? – user2235768
如果它帮助然后提高速度,谢谢 –
使用绑定处理程序绝对是在淘汰赛中做到这一点。要真正检查文本区域是否需要调整大小,您需要获取文本区域的值并检查字符串的长度。那么你可能需要做出明智的决定,何时增加textarea的大小。基本上你需要比较'''textarea.value.length'''''textarea.rows''' – dpix