この投稿を読んで、HTML5に導入された「有効」および「無効」入力値の疑似クラスがいくつかあることがわかりました。
javascriptから入力フィールドを無効/有効としてマークする方法はありますか?または、使用する検証方法をオーバーライドできますか?
この投稿を読んで、HTML5に導入された「有効」および「無効」入力値の疑似クラスがいくつかあることがわかりました。
javascriptから入力フィールドを無効/有効としてマークする方法はありますか?または、使用する検証方法をオーバーライドできますか?
回答:
この目的のためにcustomValidity関数を使用できます。
customValidityメッセージをフィールドに追加すると、無効になります。メッセージを空の文字列として設定すると、メッセージは再び有効になります(他の理由で無効でない限り)。
field.setCustomValidity("Invalid field.");
フィールドが無効になります。
field.setCustomValidity("");
HTML5制約に失敗しない限り、フィールドは有効になります。
編集:誰かがあなたが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
サーバーに送信されるフォームとid
javascriptで使用されるフォームを必ず指定してください)。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を返す必要があります。繰り返しますが、これに頼るべきではありませんが、平均的な人々を思いとどまらせるだけなら、それは簡単な解決策です。
javascriptから入力フィールドを無効/有効としてマークする方法はありますか?
残念ながら、JavaScriptで疑似クラスのスタイルを設定することはできません。疑似クラスは実際の要素ではないため、実際のDOMには存在しません。
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;}
フィールドが無効な場合(たとえば、電子メールフィールドに無効な電子メールが含まれている場合)、入力フィールドの横にあるラベルの後に赤い無効なテキストを追加します