[JQUERY] 감지 브라우저 자동 채우기
JQUERY감지 브라우저 자동 채우기
해결법
-
1.문제는 자동 완성 서로 다른 브라우저에서 다르게 처리됩니다. 일부는 변경 이벤트를 전달, 일부는하지 않습니다. 그래서 브라우저가 입력 필드를 자동 완성 때 트리거되는 이벤트에 끼어 것은 거의 불가능하다.
문제는 자동 완성 서로 다른 브라우저에서 다르게 처리됩니다. 일부는 변경 이벤트를 전달, 일부는하지 않습니다. 그래서 브라우저가 입력 필드를 자동 완성 때 트리거되는 이벤트에 끼어 것은 거의 불가능하다.
그 채워진 경우 가장 좋은 옵션은 "OFF"자동 완성을 사용하여 양식 = 대한 중 하나를 비활성화 자동 완성에있는 일정한 간격의 양식이나 설문 조사에서 볼 수 있습니다.
가에 가득 또는 그 이전 document.ready 다시이 버전의 브라우저에서도 버전으로 브라우저에서 변화 여부에 대한 질문하십시오. 사용자 이름 / 암호 필드를 들어 사용자 이름 암호 필드가 작성되어 선택한 경우에만 사용할 수 있습니다. 당신이 어떤 이벤트에 연결하려고하면 그래서 모두 당신은 매우 지저분한 코드를 가지고있다.
당신은 여기에 좋은 읽기를 할 수 있습니다
-
2.-webkit-자동 완성의 CSS 의사 클래스 다음의 MDN의 문서에서 :
-webkit-자동 완성의 CSS 의사 클래스 다음의 MDN의 문서에서 :
-webkit-자동 완성 : 그것은 일단 우리가 원하는 요소에 보이드 전이 CSS 규칙을 정의 할 수있다. JS 다음 animationstart 이벤트 사이에 끼어 할 수있을 것이다.
Klarna UI 팀에 크레딧. 여기에 자신의 좋은 구현을 참조하십시오 :
-
3.최신 파이어 폭스, 크롬, 그리고 가장자리에 나를 위해이 작품 :
최신 파이어 폭스, 크롬, 그리고 가장자리에 나를 위해이 작품 :
$('#email').on('blur input', function() { .... });
-
4.크롬 자동 완성 구글의 경우, 이것은 나를 위해 일한 :
크롬 자동 완성 구글의 경우, 이것은 나를 위해 일한 :
if ($("#textbox").is(":-webkit-autofill")) { // the value in the input field of the form was filled in with google chrome autocomplete }
-
5.나는이 문제에 대해 많이 읽고 나에게 도움이 매우 빠른 해결 방법을 제공 싶었다.
나는이 문제에 대해 많이 읽고 나에게 도움이 매우 빠른 해결 방법을 제공 싶었다.
let style = window.getComputedStyle(document.getElementById('email')) if (style && style.backgroundColor !== inputBackgroundNormalState) { this.inputAutofilledByBrowser = true }
내 템플릿에 대한 inputBackgroundNormalState은 'RGB (255, 255, 255)'이다.
브라우저가 자동 완성을 적용 할 때 그래서 기본적으로 그들은 입력이 입력의 다른 (성가신) 노란색을 적용하여 자동 완성되었음을 나타냅니다하는 경향이있다.
편집 : 모든 브라우저에이 작품
-
6.이런 경우에 누군가가 브라우저 자동 완성 변경을들을 수있는 솔루션 (오늘이었다처럼)을 찾고, 여기에 내가 입력으로 변경 리스너를 추가 할 때 단지 였는지를 단순화하기 위해 구축 한 것으로 사용자 정의 JQuery와 방법입니다 :
이런 경우에 누군가가 브라우저 자동 완성 변경을들을 수있는 솔루션 (오늘이었다처럼)을 찾고, 여기에 내가 입력으로 변경 리스너를 추가 할 때 단지 였는지를 단순화하기 위해 구축 한 것으로 사용자 정의 JQuery와 방법입니다 :
$.fn.allchange = function (callback) { var me = this; var last = ""; var infunc = function () { var text = $(me).val(); if (text != last) { last = text; callback(); } setTimeout(infunc, 100); } setTimeout(infunc, 100); };
이처럼 호출 할 수 있습니다 :
$("#myInput").allchange(function () { alert("change!"); });
-
7.GitHub의에서이 문제를 해결하기 위해 새로운 polyfill 구성 요소가 있습니다. 자동 채우기 이벤트에서보세요. 그냥 예상대로 자동 완성 작품을 설치 봐라 정자해야합니다.
GitHub의에서이 문제를 해결하기 위해 새로운 polyfill 구성 요소가 있습니다. 자동 채우기 이벤트에서보세요. 그냥 예상대로 자동 완성 작품을 설치 봐라 정자해야합니다.
bower install autofill-event
-
8.불행하게도 난이 크로스 브라우저를 확인하기 위해 찾은 신뢰할 수있는 유일한 방법은 입력을 폴링하는 것입니다. 이 반응 또한 이벤트를 수신 확인하십시오. 크롬은 해킹을 필요로 자바 스크립트에서 숨어 자동 채우기 값을 시작했다.
불행하게도 난이 크로스 브라우저를 확인하기 위해 찾은 신뢰할 수있는 유일한 방법은 입력을 폴링하는 것입니다. 이 반응 또한 이벤트를 수신 확인하십시오. 크롬은 해킹을 필요로 자바 스크립트에서 숨어 자동 채우기 값을 시작했다.
-
9.내 솔루션 :
내 솔루션 :
변경 이벤트 들어 평소와 DOM 콘텐츠로드, 이렇게 같은 :
setTimeout(function() { $('input').each(function() { var elem = $(this); if (elem.val()) elem.change(); }) }, 250);
이것은 사용자가 편집 그들에게 기회가 전에 비어 있지 않은 모든 필드의 변경 이벤트를 발생합니다.
-
10.또한 레이블이 중복 된 텍스트를 작성에 레이블을 이동 자동 완성 및 애니메이션을 감지하지 못했습니다 같은 문제에 직면하고이 솔루션은 날 위해 일했습니다.
또한 레이블이 중복 된 텍스트를 작성에 레이블을 이동 자동 완성 및 애니메이션을 감지하지 못했습니다 같은 문제에 직면하고이 솔루션은 날 위해 일했습니다.
input:-webkit-autofill ~ label { top:-20px; }
-
11.나는 비슷한 일을 찾고 있었다. 크롬은 ... 내 경우에는 래퍼 사업부는 입력 필드가 자동 완성되었는지 알 필요가 있었다. 나는 그에게 그것을 autofills 때 크롬이 입력 필드에 수행처럼 별도의 CSS를 줄 수 있도록. 내 통합 솔루션 위의 모든 해답 살펴보면 다음이었다 :
나는 비슷한 일을 찾고 있었다. 크롬은 ... 내 경우에는 래퍼 사업부는 입력 필드가 자동 완성되었는지 알 필요가 있었다. 나는 그에게 그것을 autofills 때 크롬이 입력 필드에 수행처럼 별도의 CSS를 줄 수 있도록. 내 통합 솔루션 위의 모든 해답 살펴보면 다음이었다 :
/* * make a function to use it in multiple places */ var checkAutoFill = function(){ $('input:-webkit-autofill').each(function(){ $(this).closest('.input-wrapper').addClass('autofilled'); }); } /* * Put it on the 'input' event * (happens on every change in an input field) */ $('html').on('input', function() { $('.input-wrapper').removeClass('autofilled'); checkAutoFill(); }); /* * trigger it also inside a timeOut event * (happens after chrome auto-filled fields on page-load) */ setTimeout(function(){ checkAutoFill(); }, 0);
일이에 대한 HTML이 될 것이다
<div class="input-wrapper"> <input type="text" name="firstname"> </div>
-
12.나는이 오래된 스레드 알고 있지만 많은 사람들이 여기에 대한 해결책을 찾기 위해 오는 상상할 수있다.
나는이 오래된 스레드 알고 있지만 많은 사람들이 여기에 대한 해결책을 찾기 위해 오는 상상할 수있다.
입력 (들)로 값을 (들)이있는 경우이 작업을 수행하려면, 당신은 확인할 수 있습니다 :
$(function() { setTimeout(function() { if ($("#inputID").val().length > 0) { // YOUR CODE } }, 100); });
나는 버튼을 제출 수 있도록 장전 할 때 내 로그인 폼에서 값을 확인하려면이 나 자신을 사용합니다. 코드는 jQuery를 위해 만든하지만 필요한 경우 쉽게 변경할 수 있습니다.
-
13.이 렌더링 엔진 웹킷과 브라우저 솔루션입니다. 양식 자동 완성되면, 입력은 의사 클래스를 얻을 것이다 : -webkit-autofill- (f.e. 입력 : -webkit-자동 완성 {...}). 그래서 이것은 당신이 자바 스크립트를 통해 확인을해야하는지 식별자입니다.
이 렌더링 엔진 웹킷과 브라우저 솔루션입니다. 양식 자동 완성되면, 입력은 의사 클래스를 얻을 것이다 : -webkit-autofill- (f.e. 입력 : -webkit-자동 완성 {...}). 그래서 이것은 당신이 자바 스크립트를 통해 확인을해야하는지 식별자입니다.
몇 가지 테스트 양식 솔루션 :
<form action="#" method="POST" class="js-filled_check"> <fieldset> <label for="test_username">Test username:</label> <input type="text" id="test_username" name="test_username" value=""> <label for="test_password">Test password:</label> <input type="password" id="test_password" name="test_password" value=""> <button type="submit" name="test_submit">Test submit</button> </fieldset> </form>
그리고 자바 스크립트 :
$(document).ready(function() { setTimeout(function() { $(".js-filled_check input:not([type=submit])").each(function (i, element) { var el = $(this), autofilled = (el.is("*:-webkit-autofill")) ? el.addClass('auto_filled') : false; console.log("element: " + el.attr("id") + " // " + "autofilled: " + (el.is("*:-webkit-autofill"))); }); }, 200); });
문제 페이지가로드 get 및 암호 값도 길이가됩니다. 이 브라우저의 보안 때문입니다. 브라우저가 시간 순서 후 양식을 작성하기 때문에 또한 시간 제한, 그것은이다.
이 코드는 작성 입력에 auto_filled 클래스를 추가합니다. 또한, 나는 입력 password를 입력 값, 또는 길이를 확인하려고하지만 페이지에 대한 몇 가지 사건이 일어난 직후 일입니다. 나는 몇 가지 이벤트를 트리거 시도 그래서,하지만 성공하지. 지금이 내 솔루션입니다. 즐겨!
-
14.나는이 질문에 대한 완벽한 솔루션이 코드를 시도 할 수 있습니다. 데모는 여기
나는이 질문에 대한 완벽한 솔루션이 코드를 시도 할 수 있습니다. 데모는 여기
ModernForm 함수 () { VAR modernInputElement = $ ( 'js_modern_input.'); recheckAllInput 함수 () { modernInputElement.each (함수 () { ($ (이) .val ()! == '') 경우 { $ (이) .parent () 발견 ( '라벨') addClass ( '초점')..; } }); } modernInputElement.on ({) (, 기능을 '클릭' $ (이) .parent () 발견 ( '라벨') addClass ( '초점')..; }); modernInputElement.on ( "흐림", 함수 () { 경우 ($ (이) .val () === '') { $ (이) .parent () 발견 ( '라벨') removeClass ( '초점')..; } 다른 { recheckAllInput (); } }); } ModernForm (); .form_sec { 패딩 : 30 픽셀; } .form_sec .form_input_wrap { 위치 : 상대; } .form_sec .form_input_wrap 라벨 { 위치 : 절대; 상단 : 25 픽셀; 왼쪽 : 15 픽셀; 폰트 사이즈 : 16px; 폰트 중량 : 600; Z- 색인 : 1; 색상 : # 333; -webkit-전환 : 모든 용이성 - 아웃 0.35s; -moz-전환 : 모든 용이성 - 아웃 0.35s; -ms-전환 : 모든 용이성 - 아웃 0.35s; -o 전이 : 모든 용이성 - 아웃 0.35s; 전환 : 모든 용이성 - 아웃 0.35s; } .form_sec .form_input_wrap label.focus { 상단 : 5px; 색상 : # a7a9ab; 폰트 중량 : 300; -webkit-전환 : 모든 용이성 - 아웃 0.35s; -moz-전환 : 모든 용이성 - 아웃 0.35s; -ms-전환 : 모든 용이성 - 아웃 0.35s; -o 전이 : 모든 용이성 - 아웃 0.35s; 전환 : 모든 용이성 - 아웃 0.35s; } .form_sec .form_input { 폭 : 100 %; 폰트 사이즈 : 16px; 폰트 중량 : 600; 색상 : # 333; 테두리 : 없음; 국경 바닥 : 2 픽셀 고체 #의 d3d4d5; 패딩 : 30 픽셀 0 5px 0; 개요 : 없음; } .form_sec .form_input.err { 국경 - 하단 색상 : # 888; } .form_sec .cta_login { 국경 : 1 픽셀의 고체 #의 ec1940; 경계 반경 : 2 픽셀; 배경 색상 : # ec1940; 폰트 사이즈 : 14px; 폰트 중량 : 500; 텍스트 정렬 : 센터; 색상 : #FFFFFF; 패딩 : 15 픽셀 40px; 여백 - 상단 : 30 픽셀; 표시 : 인라인 블록; } <스크립트 SRC = "https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> script>