vaadin-combo-box
が必要で、 vaadin-combo-box
が選択されているが何も選択されていない場合、 vaadin-combo-box
選択を解除すると、内側のvaadin-text-field
は無効としてマークされます。 ただし、その間に必要な属性が削除された場合、内部のvaadin-text-field
はまだ無効な状態のままです。
vaadin-combo-box
属性(または少なくとも必要な属性)を変更すると、基になるvaadin-text-field
再検証がトリガーされます。
vaadin-text-field
が無効な状態でスタックしています。 この無効な状態のため、フォームを送信できません。
vaadin-combo-box
クリックします。 オプションは表示されますが、アイテムは選択しないでください(空白のどこかをクリックしてください)vaadin-combo-box
は赤色になり、無効な状態になります。vaadin-combo-box
は無効な状態のままになりますvaadin-combo-box
何かを選択しますvaadin-combo-box
を空にします。 vaadin-combo-box
は不要になりましたが、まだ無効な状態です。vaadin-combo-box
の無効な属性を変更しても問題は解決しません。この値は、内部のvaadin-text-field
反映されていないようです。
_他のブラウザにも同じ問題があると思いますが、テストできませんでした_
代わりに、これはvaadin-text-field
バグのようです。 vaadin-combo-box
は、 required
invalid
プロパティとvaadin-text-field
同期するだけです。
コンポーネントを開発するとき、動的に変化するrequired
状態(または他の検証制約)は考慮されていないと思います。
検証では、 required
、 pattern
、 maxlength
、およびminlength
考慮されます。 これらのいずれかが設定されている場合、ネイティブ<input>
のcheckValidity()
の戻り値に基づいてinvalid
ブール値が設定されます。 これらのいずれも設定されていない場合でも、独自のロジックに基づいて手動でinvalid
をtrue
またはfalse
に設定でき、 vaadin-text-field
は無効な状態をそのまま保持します設定されています。
問題は、これらの検証制約の1つ( required
)のみが設定されていて、フィールドが検証されて無効になった後、制約を削除すると、 checkValidity()
実行されないことです。ネイティブ入力のinvalid
状態を維持します(手動で追加されたかのように)。 基本的に、アクティブな検証制約がない場合、テキストフィールドがinvalid
状態を自動的に削除することはありません。
ここでの適切なロジックは、 required
、 pattern
、 maxlength
またはminlength
制約が削除されたときを観察することだと思います_and_ invalid == true
すでに、 this.invalid = this.inputElement.checkValidity();
これは、次のようにするだけでvaadin-text-field
で再現できます。
<vaadin-text-field required="{{tfRequired}}"></vaadin-text-field><br>
<label>Required <input type="checkbox" checked="{{tfRequired::change}}"></label>
これに関する問題をhttps://github.com/vaadin/vaadin-text-field/issues/400で開きましたが、他の誰かがコンボボックスの問題に気付いた場合に見やすくするために、このコンボボックスの問題はここに残しておきます。 上記のテキストフィールドの問題が修正されたら、これを閉じる必要があります。
期待通りに動作していることを確認できました。 良い仕事をありがとう、@ Haprog! 😄
ところで。 vaadin-text-field
v2.3.9およびv2.4.10のWebJarは壊れているため、Java(Vaadin 10–13または互換モードのVaadin 14)からこれらを使用する必要がある場合は、少し待つ必要があります。 WebJarが機能するように、v2.3.10とv2.4.11をまもなくリリースする必要があります。