Firefox 4:必要なフォーム入力の赤い境界線を削除する方法はありますか?


86

フォームフィールドでrequiredが定義されている場合、Firefox 4は、ユーザーが送信ボタンを押す前であっても、この要素に赤い境界線を自動的に表示します。

<input type="text" name="example" value="This is an example" required />

ユーザーは最初は間違いを犯していないので、これはユーザーにとって不安なことだと思います。

初期状態ではその赤い境界線を非表示にしたいのですが、必須としてマークされたフィールドがない場合は、ユーザーが送信ボタンを押したときに表示します。

私が見:required:invalid新しい擬似セレクタから、その変更はのためにあるの前と後の検証。(Firefox4から必要な入力フォームREDボーダー/アウトライン

ユーザーがフォームを送信する前に赤い境界線を無効にして、不足しているフィールドがある場合はそれを表示する方法はありますか?


1
アウトラインはどうですか:0; ?
エース

回答:


154

これは少しトリッキーでしたが、私はこの例を設定しました:http//jsfiddle.net/c5aTe/これは私のために働いています。基本的に、トリックは無効なプレースホルダーテキストを回避することのようです。それ以外の場合は、これを行うことができるはずです:

input:required {
    box-shadow:none;
}
input:invalid {
    box-shadow:0 0 3px red;
}

または同様のもの...

しかし、FF4がプレースホルダーテキストを検証することを決定したので(理由はわかりません...)、フィドルのソリューション(少しハッキー-使用!important)が必要です。

お役に立てば幸いです。

編集

ドー!! -ばかげている。フィドルを更新しました:http//jsfiddle.net/c5aTe/2/-:focus疑似クラスを使用して、ユーザーが入力している間、要素のスタイルを有効であるかのように保つことができます。アイテムがフォーカスを失ったときにコンテンツが無効である場合、これは引き続き赤で強調表示されますが、設計された動作でできることはそれほど多くないと思います...

HTH :)


受理後の編集:

OPの要請による例の要約(最初の2つはFF4専用に設計されており、Chromeではないことに注意してください)

  1. プレースホルダーテキストを検証するFFの修正:http//jsfiddle.net/c5aTe/
  2. 入力時にFFを検証するための修正:http//jsfiddle.net/c5aTe/2
  3. スタイル/検証を切り替えるJSソリューション:http//jsfiddle.net/c5aTe/4

大きな進歩ですが、ユーザーが実際に何かを書く前に、入力が空のときにユーザーが入力をクリックすると、「無効な」エラーが表示されるようです。しかし、おそらく私が欲しいのは、解決できないFF4のバグです:/
Cyril N.

しかし、恐ろしい赤いボックスの影を制限する方法として+1 :)
Cyril N.

不思議なことに、それはほとんど賢すぎてその場で検証するので、これができるとは思わないでください。送信時にフォームにクラスを追加またはフォームから削除する追加のJavaScriptを使用すると、賢くなる可能性があります。次に、そのクラスが存在するかどうかに基づいて、検証の強調表示をオーバーライドできます。これの良いところは、ネイティブ検証をまだ使用していることですが、追加のjsが必要なことはあまり良くありません...:|
スチュアートバロウズ

1
朝食を作っている間、いくつかのインスピレーションがありました-上記に追加されました!
スチュアートバロウズ2011年

賢い!:pしかし、見てみると、元の状態の影と無効な状態のボックスの影があります。それらの両方が示されています。私はこれがMozillaの間違いだと信じ始め、彼らは初期状態について考えていませんでした。これが正しく、他の誰もそれを行うための完全な方法を追加しない場合、私はあなたの答えを受け入れませんが、私はあなたに報奨金を与えます(これが可能であれば、私はあなたの答えを受け入れます)。あなたはそれに値する:)あなたの助けをありがとう!
シリルN.

38

Firefox 26の時点で、無効な必須フィールドを識別するために使用される実際のCSSは次のとおりです(forms.cssから取得)。

:not(output):-moz-ui-invalid {
    box-shadow: 0 0 1.5px 1px red;
}

他のブラウザで複製するには、次を使用します。

input:invalid {
    box-shadow: 0 0 1.5px 1px red;
}

ピクセル設定をいじってみましたが、mozソースを見ずに1.5pxを推測することはありませんでした。

無効にするには、次を使用できます。

input:invalid {
    box-shadow: none;
}

精度が低い:これを気に入ってみた人には:not(output):-moz-ui-invalid向いていないはずinput:not(output):-moz-ui-invalidです。
Skoua

あなたは絶対的な伝説です。
abejdaniels

3

試してみてください:

document.getElementById('myform').reset();

これは受け入れられた答えでなければなりません。Firefox(および私がテストしたほとんどのブラウザー)は、ユーザーが何も入力していない場合、入力フィールドを無効としてマークしません。それは問題ではないはずです。質問者は私と同じことをしていて、単一ページのアプリケーションでフォームを再利用しているのではないかと思います。フォームをリセットすると、無効な入力の赤い境界線がすべてクリアされます。
ダニエルウー

2

これが私のために働いた非常に簡単な解決策です。基本的に、醜い赤を非常に素敵な青に変更しました。これは、不要なフィールドの標準色であり、Web規則です。

:required {
    border-color: rgba(82, 168, 236, 0.8);
}

1

これは私にとってうまくいきました:

input:invalid {
     -moz-box-shadow: none;
}

7
ここでの問題は、検証後、ボックスの影がまったく残っておらず、ユーザーがエラーが発生した場所の手がかりがないことです。私が欲しいのは、フォームの通常の状態では赤い境界線を表示せず、エラーが発生した場合にユーザーがフォームを送信/ぼかしたときに表示することです。
シリルN.

0

これを試してみてください、

$( "form")。attr( "novalidate"、true);

グローバル.jsファイルまたはヘッダーセクションのフォーム用。


0

少なくともほとんどの場合、問題を修正するために私が見つけた方法は次のとおりです。

<input type="text" name="example" value="This is an example" onInput="this.required = true;" />

このように、入力フィールドはその素敵な青いアウトラインで始まりますが、ユーザーが文字を入力すると、必須に設定されます(したがって、文字を入力してからバックスペースを入力すると、赤い境界線が表示されます)。この場合、ユーザーが入力をスキップする可能性があるため、これを行う場合は、必ずバックエンド検証を実施してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.