javascriptからフィールドを無効としてマークできますか?


94

この投稿を読んで、HTML5に導入された「有効」および「無効」入力値の疑似クラスがいくつかあることがわかりました。

javascriptから入力フィールドを無効/有効としてマークする方法はありますか?または、使用する検証方法をオーバーライドできますか?


「無効な」クラスでいつでも倍増することができますが、より良い方法があることを学ぶことは本当に興味深いでしょう。
とがった2012年

1
ええ、もちろんですが、それは退屈でしょう;)
Svish 2012年

1
Svish、以下の答えを再評価できますか?dajavaxがあなたが望んでいたことを正確に実行する答えを提供したようです。dajavaxの回答を承認済みとしてマークすると、他の訪問者に役立つ場合があります。
コドスジョンソン2018

@KodosJohnson間違いなく、頭を上げてくれてありがとう🙂–
Svish

回答:


160

この目的のためにcustomValidity関数を使用できます。

customValidityメッセージをフィールドに追加すると、無効になります。メッセージを空の文字列として設定すると、メッセージは再び有効になります(他の理由で無効でない限り)。

field.setCustomValidity("Invalid field."); フィールドが無効になります。

field.setCustomValidity(""); HTML5制約に失敗しない限り、フィールドは有効になります。


1
驚くばかり。ありがとうございました。codepen.io/kevinSuttle/post/the-current-state-of-web-formsに
Kevin

4
また、ブラウザの有効性メッセージを表示する場合、inputまたは直後にfield.reportValidity()をblur使用する場合もあります。
サムカールトン

4

編集:誰かがあなたがDOMの「有効な」「無効な」属性を探していることを明らかにしました。

を使用して各タグに属性を追加しますdom_object.setAttribute("isvalid", "true")。これらの属性を毎回更新する(そしてdom_object.getAttribute("isvalid")毎回使用する)中央検証機能を使用することもできます。

この関数は、要素がフォーカスを失うたびに、または必要なときにいつでも実行できます。

正確にはエレガントではありませんが、残念ながら現在javascriptとHTML5では「疑似」サポートはありません。


あなたの質問を理解できれば、Javascriptで検証を行うことができます。ただし、クライアント側の検証、特にjavascriptの検証を回避するのは非常に簡単であることに注意してください。クライアントデータを信頼してはならず、常にサーバー側でチェックを行う必要があります。

たとえば、ソースコードを調べて要素IDを簡単に見つけてdocument.getElementById('some_id').setAttribute('max', new_number)から、最大値を変更することができます(これはリンクからのエントリの1つでした)。

それを行うにはさまざまな方法があるので、私はあなたに一般的なイディオムを与えることを試みます。

実行することで値を取得できdocument.getElementById('form_element_id').valueます(nameサーバーに送信されるフォームとidjavascriptで使用されるフォームを必ず指定してください)。textareasには、を使用できます.innerHTML

次に、変数に値があります。それを確認するにはさまざまな方法があります。

たとえば、次のことができますif (parseInt(my_value) < 0) //error。正規表現を使用することもできます。すべてを説明することはしませんが、ここから始めることができますhttp://www.w3schools.com/jsref/jsref_obj_regexp.asp。w3schoolsが最良の情報源ではないことは知っていますが、始めても大丈夫だと思います。

次に、検証部分について説明onsubmit="return validateForm()します。フォームタグに追加します。validateForm()は、すべてのチェックを行う関数です。そして、関数はtrue有効な場合とfalseそうでない場合にのみ戻ります。これは、デフォルトの検証機能(デフォルトでは何もしません)をオーバーライドします

したがって、上記の例で//errorは、はに置き換えられreturn falseます。他のこともできます。エラーを警告してからfalseを返すなど。javascriptを使用して無効なフィールドを強調表示することもできます(これが「入力フィールドをjavascriptから無効/有効としてマークする」という意味かどうかはわかりません)

もちろん、すべてのフィールドをチェックしたくない場合は、特定のフィールドが合格した場合にのみtrueを返す必要があります。繰り返しますが、これに頼るべきではありませんが、平均的な人々を思いとどまらせるだけなら、それは簡単な解決策です。


9
あなたは完全に正しいですが、私はあなたが質問を完全に理解したとは思いません。HTML5では、組み込みの検証ルールを暗示する属性値をHTMLマークアップに追加するさまざまな方法があります。ブラウザがこれらのルールを適用すると、入力フィールドはCSSの「:valid」または「:invalid」疑似クラスと一致します。したがって、これらの属性を使用してHTMLを記述し、ルールを使用して「:valid」および「:invalid」セレクターを使用してCSSを記述し、JavaScriptをまったく使用せずに視覚的なフィードバックを提供できます。問題は、基本的に「:valid」ステータスがDOM属性として使用できるかどうかです。
とがった2012年

-17

javascriptから入力フィールドを無効/有効としてマークする方法はありますか?

残念ながら、JavaScriptで疑似クラスのスタイルを設定することはできません。疑似クラスは実際の要素ではないため、実際のDOMには存在しません。

バニラJavaScriptでは、検証APIを使用します

jQueryでは、これを簡単に行うことができます、http://jsfiddle.net/elclanrs/Kak6S/

if ( $input.is(':invalid') ) { ... }

または、使用する検証方法をオーバーライドできますか?

HTML5検証を使用している場合は、マークアップに固執します。それ以外の場合は、$form.attr('novalidate', 'novalidate')JSでHTML5検証を無効にし、JSを使用してフィールドを検証してから、必要に応じてvalidまたはinvalidクラスを追加できます。HTML5以外のブラウザをサポートするために、このように機能するプラグインを作成しまし


スタイリングできないとはどういう意味ですか?私はすでにそれをやっています。input:invalid + label::after{content: " INVALID";color: red;}フィールドが無効な場合(たとえば、電子メールフィールドに無効な電子メールが含まれている場合)、入力フィールドの横にあるラベルの後に赤い無効なテキストを追加します
Svish

11
「JavaScriptから入力フィールドを無効/有効としてマークする方法はありますか?」「残念ながら、JavaScriptから疑似クラスのスタイルを設定することはできません」それは質問の内容ではありません。
mikemaccana 2015年

ただし、CSSOMを使用して、疑似クラスを使用して新しいクラスを動的に定義できるはずです...
Brett
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.