天天看點

chrome輸入框input黃色背景去除 及 autocomplete失效解決方法

1、寫在前面

在寫一個登陸頁面的時候,打算把表單裡input标簽的自動完成功能關閉,于是把帳号和密碼框的autocomplete屬性設定為off。由于之前登陸選擇了記住密碼,每次在chrome和firefox打開或者重新整理頁面的時候都把帳号和密碼給自動完成了。

于是乎與需求有誤差,是以随便處理了下,但是最近勞煩,決定和這問題杠上了。

以下是各種測試、各種結論、各種扯淡……

呵呵
           

随着chrome版本的更新,有的chrome支援重寫input:-webkit-autofill原有的屬性,有的不支援重寫。另外js也無法擷取到chrome自動填充的表單的value值,是以網上盛傳的使用jquery解決的方法也是不湊效,最多也就隻能去掉黃色背景,而自動填充的value卻被移除了。

是以各種那value值的判斷出問題了。
廢話多了,來點料才是實在(已經試過n多方法,隻貼有效地,在版本46-48下測試):
           

2、關閉自動填充

原理:chrome和firefox的表單自動完成是以password類型的input标簽為識别條件來建構記住密碼這個功能的,那麼在輸出頁面的時候完全可以把這個密碼框的type設定為text,然後在使用者點選密碼框輸密碼時把這個密碼框的type再變回password

<input type="text" onfocus="this.type='password'" class="" name="loginPwd">           

3、去掉黃色背景

chrome輸入框input黃色背景去除 及 autocomplete失效解決方法

CSS:

<style type="text/css">
    input:-webkit-autofill {
         -webkit-box-shadow: 0 0 0px 1000px white inset;
       }
</style>           

4、自定義placeholder效果時顯示重疊處理

自動填充的password的輸入不觸發change事件,
是以去掉placeholder的代碼也無效;
再沒有頁面任何操作(滑鼠點選任何地方)前,也拿不到value;
           

效果及代碼:

chrome輸入框input黃色背景去除 及 autocomplete失效解決方法
chrome輸入框input黃色背景去除 及 autocomplete失效解決方法

html:

<form action="">
    <ul class="ul">
        <li class="li">
            <div class="ipt_box ipt_long nick_name phfl">
                <i class="ico"></i>
                <label class="placeHolder">請輸入賬号</label>
                <input type="text" class="" name="loginName">
            </div>
            <div class="error"><i class="ico"></i>手機或郵箱格式不正确</div>
        </li>
        <li class="li">
            <div class="ipt_box ipt_long pwd phfl">
                <i class="ico"></i>
                <label class="placeHolder">請輸入密碼</label>
                <input type="password" class="" name="loginPwd">
            </div>
            <div class="error"><i class="ico"></i>密碼長度6~16位</div>
        </li>
    </ul>
    <div class="operate">
        <span onclick="javascript:G.login.doLoginStep1();" class="btn">登入</span>
    </div>
</form>           
處理方式:判斷使用者名被自動填充的話,将密碼框的placeholder也去掉。
           
<script type="text/javascript">
$(function(){
    $(".phfl input").eq(0).change(function (){
        var _t = $(this);
        if(_t.val() != "")
            $(".login_div .placeHolder").hide();
        }
    }).change();
})
</script>           

這麼作弊會不會被罵啊?管不了那麼多了,切合自己的需求來處理好才是王道。下面貼上用setTimeout處理的方法,不過延遲執行的時間比較坑:小了沒效果,大了重疊層出現一段時間後才顯示正常……是以我用了20(一閃而過,還記的那個詞吧(

你傷害了我,卻一笑而過

))

<script type="text/javascript">
$(function(){
    setTimeout(function(){
        var _t = $(".phfl input").eq(0);
        if(_t.val() != ""){
            $(".login_div .placeHolder").hide();
        }
       }, 20);
})
</script>           

至此,你也看得夠多的了,自己玩玩吧。

ps:鑒于個人經驗有限,所有觀點,如有異議,請直接回複讨論(請勿發表攻擊言論)。
加入QQ群209952809(需回答問題,答案為csdn);群聊更快解決問題,更happy。
           

繼續閱讀