サインインとサインアップの2つの基本的なフォームがあります。どちらも同じページにあります。今、私はフォームの自動入力のサインに問題はありません、サインアップフォームの自動入力も同様で、私はそれが好きではありません。
また、フォームスタイルの背景が黄色になり、上書きすることができず、インラインCSSを使用して上書きすることはできません。黄色に着色されないようにするにはどうすればよいですかおよび(おそらく)自動入力?前もって感謝します!
サインインとサインアップの2つの基本的なフォームがあります。どちらも同じページにあります。今、私はフォームの自動入力のサインに問題はありません、サインアップフォームの自動入力も同様で、私はそれが好きではありません。
また、フォームスタイルの背景が黄色になり、上書きすることができず、インラインCSSを使用して上書きすることはできません。黄色に着色されないようにするにはどうすればよいですかおよび(おそらく)自動入力?前もって感謝します!
回答:
オートコンプリートには、次を使用できます。
<form autocomplete="off">
着色問題に関して:
スクリーンショットから、webkitが次のスタイルを生成することがわかります。
input:-webkit-autofill {
background-color: #FAFFBD !important;
}
1)#id-stylesは.classスタイルよりもさらに重要であるため、以下が機能する可能性があります。
#inputId:-webkit-autofill {
background-color: white !important;
}
2)それがうまくいかない場合は、プログラムでJavaScriptを介してスタイルを設定してみることができます
$("input[type='text']").bind('focus', function() {
$(this).css('background-color', 'white');
});
3)それがうまくいかない場合、あなたは運命にあります:-)これを考慮してください:これは黄色を隠すことはありませんが、テキストを再び読みやすくします。
input:-webkit-autofill {
color: #2a2a2a !important;
}
4)css / javascriptソリューション:
css:
input:focus {
background-position: 0 0;
}
次のjavascriptをonloadで実行する必要があります。
function loadPage()
{
if (document.login)//if the form login exists, focus:
{
document.login.name.focus();//the username input
document.login.pass.focus();//the password input
document.login.login.focus();//the login button (submitbutton)
}
}
例えば:
<body onload="loadPage();">
幸運を :-)
5)上記のいずれの方法でも入力要素を削除、複製せず、複製された要素をページに戻す場合(Safari 6.0.3で機能):
<script>
function loadPage(){
var e = document.getElementById('id_email');
var ep = e.parentNode;
ep.removeChild(e);
var e2 = e.cloneNode();
ep.appendChild(e2);
var p = document.getElementById('id_password');
var pp = p.parentNode;
pp.removeChild(p);
var p2 = p.cloneNode();
pp.appendChild(p2);
}
document.body.onload = loadPage;
</script>
6)ここから:
if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
$(window).load(function(){
$('input:-webkit-autofill').each(function(){
var text = $(this).val();
var name = $(this).attr('name');
$(this).after(this.outerHTML).remove();
$('input[name=' + name + ']').val(text);
});
});
}
code
var keepTheInputCloned = setInterval(function(){ var e = document.getElementById('id_email'); var ep = e.parentNode; ep.removeChild(e); var e2 = e.cloneNode(); ep.appendChild(e2); var p = document.getElementById('id_password'); var pp = p.parentNode; pp.removeChild(p); var p2 = p.cloneNode(); pp.appendChild(p2); },50); setTimeout(function(){clearInterval(keepTheInputCloned)},1000);
シャドウの内側に「強い」トリックを設定します。
input:-webkit-autofill {
-webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */
-webkit-text-fill-color: #333;
}
input:-webkit-autofill:focus {
-webkit-box-shadow: 0 0 0 50px white inset;/*your box-shadow*/
-webkit-text-fill-color: #333;
}
<form autocomplete="off">
ほとんどすべての最近のブラウザーはそれを尊重します。
autocomplete
、それがバージョン5の前にHTMLに無効だということです
検索の2時間後、Google Chromeはまだなんとかして黄色を上書きしているようですが、私は修正を見つけました。ホバー、フォーカスなどにも使用できます。あなたがしなければならないすべてはそれに追加!important
することです。
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
-webkit-box-shadow: 0 0 0px 1000px white inset !important;
}
これにより、入力フィールドから黄色が完全に削除されます
また、フォーム要素のname属性を、生成されたものに変更して、ブラウザーが追跡しないようにすることもできます。ただし、Firefox 2.x +とgoogle chromeでは、リクエストURLが同じであれば、それほど問題はないようです。基本的に、サインアップフォームにsaltリクエストパラメータとsaltフィールド名を追加してみてください。
しかし、私はautocomplete = "off"がまだ一番の解決策だと思います:)
HTML5の時点で(を介してautocomplete="off"
)自動補完を無効にすることができますが、ブラウザの強調表示を上書きすることはできません。::selection
CSSをいじってみることもできます(ほとんどのブラウザーは、それを機能させるためにベンダープレフィックスが必要です)。
ブラウザーベンダーがベンダー固有の方法でオーバーライドする方法を具体的に実装していない限り、ユーザーのサイトのスタイルシートをオーバーライドすることをすでに目的としているそのようなスタイルについては何もできません。これらは通常、スタイルシートが適用された後に適用され、! important
オーバーライドも無視されます。
<form>
要素にコードがあるだけで、ブラウザのオートコンプリートがオートコンプリートになる場合があります。
<input>
エレメントにも入れてみましたが、うまくいきました。
<form autocomplete="off"> AND <input autocomplete="off">
この属性のサポートは終了しました。https://bugzilla.mozilla.org/show_bug.cgi?id = 956906#c1をお読み ください
https://bugzilla.mozilla.org/show_bug.cgi?id=956906
私が見つけた別の回避策は、それがメール、ユーザー名、または電話フィールドであることを示唆する入力フィールド内のプレースホルダーを取り除くことです(つまり、「あなたのメール」、「メール」など)。
これにより、ブラウザはそれがどのような種類のフィールドであるかを認識できないため、オートコンプリートを試みません。
入力フィールドにある場合は、「黄色を外す」ことを試みています...
したがって、次のようになります。
<input id="login" style="background-color: #ccc;" value="username"
onblur="if(this.value=='') this.value='username';"
onfocus="if(this.value=='username') this.value='';" />
これにより、SafariとChromeの両方の問題が修正されます
if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
window.setInterval(function(){
$('input:-webkit-autofill').each(function(){
var clone = $(this).clone(true, true);
$(this).after(clone).remove();
});
}, 20);
}
form
要素は持っているautocomplete
あなたが設定できるという属性をoff
。CSSの時点で、!important
プロパティの後のディレクティブはそれがオーバーライドされないようにします:
background-color: white !important;
IE6だけがそれを理解しません。
私があなたを誤解しているなら、outline
あなたが役に立つと思うプロパティもある。
!important
ディレクティブがない限り最後に適用する必要があります。この場合、ディレクティブは他のすべてのものよりも優先されます。ユーザーエージェントのスタイルシートを確認する必要があります(ただし、どこにあるかわかりません)。
JavaScriptでGoogleツールバーのオートコンプリート機能が無効になっているのを見てきました。他のいくつかの自動入力ツールで動作する可能性があります。オートコンプリートに組み込まれているブラウザーに役立つかどうかはわかりません。
<script type="text/javascript"><!--
if(window.attachEvent)
window.attachEvent("onload",setListeners);
function setListeners(){
inputList = document.getElementsByTagName("INPUT");
for(i=0;i<inputList.length;i++){
inputList[i].attachEvent("onpropertychange",restoreStyles);
inputList[i].style.backgroundColor = "";
}
selectList = document.getElementsByTagName("SELECT");
for(i=0;i<selectList.length;i++){
selectList[i].attachEvent("onpropertychange",restoreStyles);
selectList[i].style.backgroundColor = "";
}
}
function restoreStyles(){
if(event.srcElement.style.backgroundColor != "")
event.srcElement.style.backgroundColor = "";
}//-->
</script>
多くのことを試した後、自動入力されたフィールドを無力化し、それらを複製されたものに置き換える作業ソリューションを見つけました。添付されたイベントを失うことなく、私は別の(少し長い)ソリューションを考え出しました。
「入力」イベントごとに、関係するすべての入力に「変更」イベントをすばやく添付します。自動入力されたかどうかをテストします。はいの場合、ブラウザをだまして値がユーザーによって変更されたと見なす新しいテキストイベントを送出し、黄色の背景を削除できるようにします。
var initialFocusedElement = null
, $inputs = $('input[type="text"]');
var removeAutofillStyle = function() {
if($(this).is(':-webkit-autofill')) {
var val = this.value;
// Remove change event, we won't need it until next "input" event.
$(this).off('change');
// Dispatch a text event on the input field to trick the browser
this.focus();
event = document.createEvent('TextEvent');
event.initTextEvent('textInput', true, true, window, '*');
this.dispatchEvent(event);
// Now the value has an asterisk appended, so restore it to the original
this.value = val;
// Always turn focus back to the element that received
// input that caused autofill
initialFocusedElement.focus();
}
};
var onChange = function() {
// Testing if element has been autofilled doesn't
// work directly on change event.
var self = this;
setTimeout(function() {
removeAutofillStyle.call(self);
}, 1);
};
$inputs.on('input', function() {
if(this === document.activeElement) {
initialFocusedElement = this;
// Autofilling will cause "change" event to be
// fired, so look for it
$inputs.on('change', onChange);
}
});
私は非常に多くのスレッドを読み、非常に多くのコードを試しました。これらすべてを収集した後、ログインフィールドとパスワードフィールドをきれいに空にし、背景を白にリセットする唯一の方法は次のとおりです。
$(window).load(function() {
setTimeout(function() {
$('input:-webkit-autofill')
.val('')
.css('-webkit-box-shadow', '0 0 0px 1000px white inset')
.attr('readonly', true)
.removeAttr('readonly')
;
}, 50);
});
気軽にコメントしてください。もしあなたが何か見つけたら、私はすべての拡張機能を利用できます。
オートコンプリートオフは、最新のブラウザーではサポートされていません。私が見つけたオートコンプリートを解決する最も簡単な方法は、HTMLとJSを使用した小さなトラックでした。まず最初に、HTMLの入力タイプを「パスワード」から「テキスト」に変更します。
<input class="input input-xxl input-watery" type="text" name="password"/>
ウィンドウが読み込まれた後にオートコンプリートが開始されます。それで大丈夫です。しかし、フィールドのタイプが「パスワード」ではない場合、ブラウザは入力する必要があるフィールドを認識していませんでした。したがって、フォームフィールドにオートコンプリートはありません。
その後、イベントfocusinをパスワードフィールドにバインドします。バックボーン:
'focusin input[name=password]': 'onInputPasswordFocusIn',
ではonInputPasswordFocusIn
、単純なチェックでフィールドのタイプをパスワードに変更するだけです。
if (e.currentTarget.value === '') {
$(e.currentTarget).attr('type', 'password');
}
それで終わりです!
UPD:これは無効なJavaSciprtでは機能しません
2018年にUPD。面白いトリックも見つかりました。readonly属性を入力フィールドに設定し、フォーカスイベントで削除します。最初にブラウザがフィールドに自動入力するのを防ぎ、2番目はデータの入力を許可します。
autocomplete=off
、FF、しばらくChrome、以前のバージョンほどのIEで機能するを使用することもできます
入力タグでautocomplete = "none"を使用して試してください
これは私のために働く
また、テキストの色を暗い色に変更する必要がありました(StackOverflowの暗いテーマの色を参照)。
そのため、@TamásPap、@ MCBL、および@donのソリューションがハイブリッドになった。
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
-webkit-box-shadow: 0 0 0px 1000px #2d2d2d inset !important;
-webkit-text-stroke-color: #e7e8eb !important;
-webkit-text-fill-color: #e7e8eb !important;
}
これをあなたのCSSに入れないのはなぜですか:
input --webkit-autocomplete {
color: inherit;
background: inherit;
border: inherit;
}
これで問題が解決します。ただし、ユーザーが以前のようにフォームに自動入力されたことをユーザーが確認できないため、使いやすさの問題が発生します。
[編集]これを投稿した後、私は同様の回答が既に与えられていること、そしてあなたがそれが機能しないとコメントしたことを見ました。私がテストしたときにうまくいったので、なぜだかよくわかりません。
input:-webkit-autofill
とinput --webkit-autocomplete
単純に存在していない
ここでの実際の問題は、Webkit(Safari、Chromeなど)にバグがあることです。ページに複数の[フォーム]があり、それぞれに[input type = "text" name = "foo" ...]がある(つまり、属性 'name'に同じ値を持つ)場合、ユーザーがページへの自動入力は、送信された[フォーム]ではなく、ページの最初の[フォーム]の入力フィールドで行われます。2回目は、NEXT [フォーム]が自動入力されます。同じ名前のテキスト入力フィールドがある[フォーム]のみが影響を受けます。
これはWebkit開発者に報告する必要があります。
Operaは正しい[フォーム]に自動入力します。
FirefoxとIEは自動入力しません。
だから、私はもう一度言います:これはWebkitのバグです。