通常、 Materialize を使用すると、ユーザー入力がボックスを選択してテキストを入力するまで、テキスト入力ボックスのラベルが入力ボックス内に表示されます。ただし、ボックスの値がJavaScriptを介して入力される場合、ラベルは邪魔になりません。これはボックス内にとどまり、入力したテキストと重なります。 javascriptでもラベルの遷移をトリガーする方法があるので、これは起こりませんか?
より具体的には、Railsでターボリンクを有効にしてMaterializeを使用している場合、空でない値が事前に入力されているMaterializeフォームフィールドがページの読み込み時にアクティブにならないことがわかります。
次の方法が私のために働きました:
$(function() {
M.updateTextFields();
});
クラス'active'
を対応するラベルとプレフィックスアイコンの両方に追加します。
ラベルの遷移動作は、ラベルの要素にactive
クラスを追加することによってトリガーされます。したがって、JavaScriptでフィールドに入力するだけでなく、そのクラスをラベル($('label').addClass('active')
など)に追加すると、ユーザーアクションで選択したときと同じように、ラベルはフィールドから遷移します。
document.ready
イベントは、ターボリンクが機能しているときに一度だけ発生するため、ターボリンクのロードイベントを利用する必要があります。
so高速に発生するため、アニメーションを表示したい場合は、小さなタイムアウトでラップしてください。
タイムアウト/可視アニメーションあり
document.addEventListener('turbolinks:load', () => {
setTimeout(() => {
M.updateTextFields();
}, 100);
});
タイムアウトなし/アニメーション表示なし
document.addEventListener('turbolinks:load', () => {
M.updateTextFields();
});
Rails 5 with Turbolinks、およびMaterialize CSS 1.0.
追加 class="active"
into入力フィールドに関連付けられたlabel
タグ。
古いバージョン(0.x)のMaterializecssを使用している場合は、次を使用します。
Materialize.updateTextFields();
の代わりに:
M.updateTextFields();
ラベルを使用する場合は、次のものを使用します。
$("label[for='idTag']").addClass('active');
ReactJSでソリューションを探している人のために:
document.M.updateTextFields()
をコンポーネントのcomponentDidMount()
lifeCycleメソッドに追加します。上記のソリューションは、フォームに事前入力する必要がある特定の値がある場合に役立ちます。 (例:更新詳細フォーム)
JQueryでは$( '#yourInputText')。change();を使用できます。