같은 페이지에 로그인과 가입이라는 두 가지 기본 양식이 있습니다. 이제 자동 완성 양식의 로그인에 문제가 없습니다.하지만 가입 양식 자동 완성도 마음에 들지 않습니다.
또한 양식 스타일에는 무시할 수없는 노란색 배경이 있으며 인라인 CSS를 사용하여 원하지 않습니다. 노랑색을 멈추게하려면 어떻게해야합니까그리고 (아마도) 자동 충전? 미리 감사드립니다!
같은 페이지에 로그인과 가입이라는 두 가지 기본 양식이 있습니다. 이제 자동 완성 양식의 로그인에 문제가 없습니다.하지만 가입 양식 자동 완성도 마음에 들지 않습니다.
또한 양식 스타일에는 무시할 수없는 노란색 배경이 있으며 인라인 CSS를 사용하여 원하지 않습니다. 노랑색을 멈추게하려면 어떻게해야합니까그리고 (아마도) 자동 충전? 미리 감사드립니다!
답변:
자동 완성을 위해 다음을 사용할 수 있습니다.
<form autocomplete="off">
착색 문제와 관련하여 :
스크린 샷에서 웹 키트가 다음 스타일을 생성한다는 것을 알 수 있습니다.
input:-webkit-autofill {
background-color: #FAFFBD !important;
}
1) #id 스타일이 .class 스타일보다 훨씬 중요하므로 다음과 같이 작동 할 수 있습니다.
#inputId:-webkit-autofill {
background-color: white !important;
}
2) 그래도 작동하지 않으면 프로그래밍 방식으로 자바 스크립트를 통해 스타일을 설정하려고 할 수 있습니다
$("input[type='text']").bind('focus', function() {
$(this).css('background-color', 'white');
});
3) 그래도 문제가 해결되지 않으면 :-) 다음 사항을 고려하십시오. 노란색을 숨기지 않지만 텍스트를 다시 읽을 수있게 만듭니다.
input:-webkit-autofill {
color: #2a2a2a !important;
}
4) CSS / 자바 스크립트 솔루션 :
CSS :
input:focus {
background-position: 0 0;
}
그리고 다음 자바 스크립트가 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;
}
이 CSS 규칙을 추가하면 노란색 배경색이 사라집니다. :)
input:-webkit-autofill {
-webkit-box-shadow: 0 0 0px 1000px white inset;
}
<form autocomplete="off">
거의 모든 최신 브라우저가이를 존중합니다.
autocomplete
는 버전 5 이전의 HTML에서는 유효하지 않다는 것입니다.
검색 2 시간 후에도 어떻게 든 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;
}
입력 필드에서 노란색을 완전히 제거합니다.
을 통해 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
지시어 가없는 경우 사용자 에이전트 스타일 시트의 설정이 마지막에 적용되어야합니다 .이 경우 다른 모든 것보다 우선합니다. 사용자 에이전트 스타일 시트를 확인해야합니다 (어디에서 찾을 수 있는지 모르겠습니다).
자바 스크립트로 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의 입력 유형을 'password'에서 'text'로 변경하는 것입니다.
<input class="input input-xxl input-watery" type="text" name="password"/>
창이로드 된 후 자동 완성이 시작됩니다. 괜찮아. 그러나 필드 유형이 '비밀번호'가 아닌 경우 브라우저는 어떤 필드를 완성해야하는지 알지 못했습니다. 따라서 양식 필드에는 자동 완성 기능이 없습니다.
그런 다음 이벤트 포커스를 비밀번호 필드에 바인드하십시오 (예 : 백본에서 :
'focusin input[name=password]': 'onInputPasswordFocusIn',
에서 onInputPasswordFocusIn
간단한 확인을 통해 필드 유형을 비밀번호로 변경하십시오.
if (e.currentTarget.value === '') {
$(e.currentTarget).attr('type', 'password');
}
그게 다야!
UPD :이 기능은 비활성화 된 JavaSciprt에서 작동하지 않습니다.
2018 년 UPD. 재미있는 트릭도 발견되었습니다. readonly 속성을 입력 필드로 설정하고 포커스 이벤트에서 제거하십시오. 먼저 브라우저가 필드를 자동으로 채우지 못하게하고, 둘째로 데이터를 입력 할 수 있습니다.
autocomplete=off
FF, Chrome 및 IE에서 작동하는 것처럼을 사용하는 것이
입력 태그에서 autocomplete = "none"으로 시도하십시오
이것은 나를 위해 작동
또한 텍스트 색상을 더 어둡게 변경해야했습니다 (StackOverflow 어두운 테마 색상 참조).
따라서 @ Tamás Pap, @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;
}
문제를 해결해야합니다. 유용성 문제가 발생하지만 사용자는 양식이 익숙한 방식으로 자동 완성되었음을 알 수 없기 때문에 유용합니다.
[edit]이 글을 게시 한 후 비슷한 답변이 이미 제공되어 있으며 작동하지 않았다고 언급했습니다. 테스트 할 때 왜 효과가 있었는지 잘 모르겠습니다.
input:-webkit-autofill
하고 input --webkit-autocomplete
단순히 존재하지 않습니다
여기서 진짜 문제는 웹킷 (Safari, Chrome 등)에 버그가 있다는 것입니다. 페이지에 둘 이상의 [form]이 있고 각각 [input type = "text"name = "foo"...] (예 : 'name'속성에 대해 동일한 값을 가짐)을 가진 경우 사용자가 반환 할 때 자동 완성은 전송 된 [양식]이 아니라 페이지의 첫 번째 [양식]의 입력 필드에서 수행됩니다. 두 번째로 NEXT [form]이 자동으로 채워집니다. SAME 이름을 가진 입력 텍스트 필드가있는 [form] 만 영향을받습니다.
이것은 웹킷 개발자에게보고해야합니다.
Opera는 올바른 [양식]을 자동 완성합니다.
Firefox와 IE는 자동 완성되지 않습니다.
다시 말하지만 이것은 Webkit의 버그입니다.