ドメインごとに入力したIDとパスワードをブラウザが記憶して、次回から自動的に補完してくれるautocomplete機能があります。 autocompleteをoffにする †form自体に設定 <form method="post" action="/" autocomplete="off"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit"> </form> passwordフィールドに設定 <form method="post" action="/"> <input type="text" name="username"> <input type="password" name="password" autocomplete="off"> <input type="submit"> </form> 言うことを聞いてくれません。 そもそもどうしてそんなに補完したがるのか †
という理由だそうです。 任意の文字列を代入する †参考サイトにあった方法を試してみます。 <form method="post" action="/" autocomplete="nope"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit"> </form> ダメじゃん。 nameを変えてみる †関係ないnameに変更したらどうなるのか。 <form method="post" action="/" autocomplete="off"> <input type="text" name="aaaaa"> <input type="password" name="bbbbb"> <input type="submit"> </form> ダメだ。 どうやってフィールドを判定しているのか †試しにtypeをpasswordからtextへ変更してみた。 <form method="post" action="/" autocomplete="nope"> <input type="text" name="username"> <input type="text" name="password"> <input type="submit"> </form> 補完されない typeがpasswordのフィールドをパスワード項目とし、その直近の上のフィールドをID項目と判定しているっぽい。 forcusinでtypeをtextからpasswordへ変更 †HTML描画直後はパスワードフィールドはtypeをtextで表示。 jQueryではtypeは変更できなさそうなので、以下で対応。 <form method="post" action="/" autocomplete="nope"> <input type="text" name="username"> <input type="text" name="password" id="password"> <input type="submit"> </form> <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> <script> $(function(){ $('#password').focusin(function(){ document.getElementById('password').type = 'password'; }); }); </script> 問題点 †IDを入力せずにパスワードフィールドに先にforcusinされると補完されちゃう。 |