私は、keyupイベントのテキストエリアの高さを自動拡張するロジックを実装しました。しかし、ノックアウトカスタムバインディングを介して値がテキストエリアにバインドされると、そのテキストエリアの高さを初期化します。どんな解決策ですか? (jQueryのまたは任意の他のライブラリを使用せず、唯一のKnockoutJSを使用することにより)ノックアウトjsを使ってテキストエリアを自動拡張する
3
A
答えて
3
イベントを使用してサイズ変更をトリガーすることについて強くお勧めします。代わりに、textInput
バインディングを使用して、オブザーバブルの入力を追跡し、その変更をサブスクライブすることができます。
はここでの例です:結合が観察value
変数に任意の入力変更を書き込み
textInput
:これは動作します<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); }) } };
。
computed
は、この値を使用してサイズ変更をトリガーします。これにより、自動的に購読が作成されます。
それは同様event
同等を示すRight Mouse Button > cut
例のようなものを扱うので、これはアプローチよりも優れている:
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()
を適用することカスタムバインディングを作成することができます
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. テキストエリアのサイズに応じてテキストエリアを拡張する(jquery)
- 3. SeleniumとRubyを使ってChrome拡張機能を自動化する
- 4. Magento 2はノックアウトJSを使用してテキストフィールドを自動入力する方法
- 5. 動的に拡張JSクラス
- 6. 自動拡張可能なテキストエリアが正しく動作しない
- 7. 拡張クラス内の拡張メソッド自体を使用して
- 8. ノックアウトjsの自動ボタンをクリックする方法
- 9. Java自動拡張アレイ
- 10. 自動火災拡張jpm
- 11. iOS 11 UIToolBar自動拡張
- 12. ブートストラップ4ベータナビ自動拡張
- 13. クロム拡張子を使用してファイルブラウズアクションを自動化
- 14. カスタムバインディング、エクステンダ、またはカスタム関数を使用してノックアウトを拡張する
- 15. どのように私は動的にテキストエリアを追加し、また自動拡張を行います
- 16. 拡張子がJSのオブジェクトを拡張する
- 17. ノックアウト自動完了
- 18. ノックアウト観測可能な配列を拡張する
- 19. Chrome拡張 - .jsファイルをオーバーライド
- 20. JSスライダ拡張/オプション
- 21. 拡張JS Boolean.prototypeは
- 22. Durandal JSフレームワークでJureryをノックアウトを使って追加して実行する
- 23. スカフォールディング - jsオブジェクトを拡張する
- 24. モーメントjsを拡張するには?
- 25. Cythonを使ってC++共有オブジェクトライブラリを使ってPythonを拡張する
- 26. divに含まれるテキストエリアを拡張する
- 27. クローム自動拡張が分度器テスト
- 28. WordPress管理タグクラウド自動拡張
- 29. VSCode用のPython自動インポート拡張
- 30. InnoDBの "自動拡張"機能
は、返信用にどうもありがとうございます私の質問、私はノックアウトjsに新しいです。それが動作しない、autoresize()でカスタムバインディングを作成する方法? JSfiddleで設定できるかどうか気になりますか? – user2235768
それは、アップ率を助ける場合は、ありがとう –
バインディングハンドラを使用してノックアウトでそれを行う方法は間違いなくです。テキストエリアのサイズ変更が必要かどうかを実際に確認するには、テキストエリアの値を取得して文字列の長さを確認する必要があります。次に、テキストエリアのサイズをいつ成長させるかについて、情報に基づいた決定をする必要があります。基本的に '' textarea.value.length'''と '' 'textarea.rows''を比較する必要があります – dpix