5

作成したJavascript検証フレームワークがあり、それにHTML5検証を追加しようとしています。data-私のフレームワークでは、検証は、属性を使用してvalidation-constraintsを要素にバインドすることによって実行されます。これは、、、などrequiredの属性を使用してHTML5検証を行う方法と多少似ています。minmax

現在、2つの問題があります。そうですね、必ずしも問題ではないかもしれませんが、どうすればいいのかを判断できるように、状況をよく理解していただきたいと思います。

私が持っている最初の問題は、要素の値が要素のタイプと一致しない場合にelement.validity.typeMismatch設定されます。trueたとえば、要素に無効なURL値がある場合、type="url"または要素に無効なメールがある場合ですtype="email"。ただし、この動作は、のようなものでは一貫性がありませんtype="number"。動作に一貫性がない理由は、ブラウザーが(UIまたはDOMを介して)withに無効な値を追加できないためです。このため、に設定されることはなく、常に。を返します。この動作は、無効な値を入力できる場所での動作と矛盾しています。inputtype="number"element.validity.typeMismatchtrueelement.checkValidity()truetype="url"type="email"element.validity.typeMismatchelement.checkValidity()期待値を返します。

の使用についても同様の問題がありmaxlengthます。にというValidityStateプロパティがあります。*の値よりも長い値を入力することはできないため、ブラウザから直接操作する場合、この値が設定されることはないようです。さらに、DOMからの値よりも長い値を設定できたとしても、この場合も、に設定れることはありません。それで、多かれ少なかれ役に立たないのに、なぜこのプロパティがそこにあるのか疑問に思います。tooLongelement.validity.tooLongtrueinputmaxlength maxlength element.validity.tooLongtrue

現在、HTML5検証はこれらの制約でどのように動作すると予想されますか?ブラウザが無効な値を入力できない場合、これらの制約違反に対してエラーメッセージを生成するにはどうすればよいですか?

4

1 に答える 1

3

私はこの問題についてより多くの説明を見つけることができました。W3CWHATWGはどちらも次のように述べています。

typeMismatch

コントロールはタイプの不一致に悩まされています。

[...]

タイプの不一致に苦しんでいる

任意のユーザー入力を許可するコントロールの値が正しい構文(Eメール、URL)ではない場合。

したがって、この値は、またはのtypeいずれかに設定さurlれている場合にのみ設定されているように見えますemail。他のすべての場合、input要素はユーザーが値を無効な値に(手動またはプログラムで)設定することを許可しないため、設定されません。

tooLong残念ながら、これは;の問題に答えません。仕様では、入力値が長すぎる場合に設定されるとされていますが、そうではないようです。

于 2013-03-27T05:17:49.310 に答える