2024年06月13日
jquery:mousedown(func)
このイベントの説明
jQueryの mousedown(func) は、マウスがダウンした時点のイベント処理を記述します。
パスワードのオートコンプリート機能(自動補完)を無効化する時に利用します。
構文
セレクタ.mousedown(function(){イベントが発生した時の処理})
オートコンプリートとは?
オートコンプリートとは入力データをブラウザが記憶し、データ入力時にこの記憶データを使うブラウザ機能になります。
ブラウザ機能のため、ブラウザの種類(crome、Edige、firefox)やオートコンプリート対象が「テキスト」か「パスワード」かによって挙動が異なる事に注意してください。
1.テキストのオートコンプリート
1.オートコンプリートが働くケース
下記の入力BOXをクリックして文字列を入力し「送信」を繰り返してください。
そのたびにブラウザに記憶される値が増えます。
また記憶データから選択入力するとBOXの背景色が水色(chome又はEdigeの場合)になります。
上記のプログラムは下記のプログラムで構成されています。
HTML部分
<form action='' method='post'> <p>データを入力してください</p> <p><input type='text' name='text' class='text' value='' size=40 ></p> <button type='submit' name='action' value='input_text01'>送信</button> </form> <p class='msg01' style='color:red;'><?php esc_html_e($input_submit_msg); ?></p>
■3行目:<input>タグの指定
typeは 'text' で、valueは 空白 です。
■form全体の説明はPHPのフォーム操作を参照して下さい。
PHP部分
<?php if($_POST['action'] == 'input_text01'){ $text = $_POST['text']; $input_submit_msg = '入力データは【'.$text.'】です。'; } ?>
■上記は、送信ボタンが挿入された時だけ処理され入力されたデータを表示します。
メモ:背景色を白にする方法
オートコンプリート機能でデータを入力すると、背景が水色になります。
これはブラウザがchome又はEdigeの場合で、firefoxは背景色は付きません。
これが嫌な場合はCSSで下記を指定すると、背景が白になります。
<style> .text{box-shadow: 0 0 0 20px white inset;} </style>
下記は上記のCSSを設定した例です。
2.オートコンプリートをOFFにする方法
オートコンプリートをOFFにする場合は autocomplete='off' 属性を利用します。
下記入力BOXに文字列を入力し「送信」を繰り返してください。
入力データはブラウザに保存されません。
上記のプログラムは下記のプログラムで構成されます。
HTML部分
<form action='' method='post' > <p>データを入力してください</p> <p><input type='text' name='text' class='text' size=40 autocomplete='off'></p> <button type='submit' name='action' value='input_text02'>送信</button> </form> <p class='msg01' style='color:red;'><?php esc_html_e($input_submit_msg); ?></p>
■3行目:<input>タグ
ここに autocomplete='off' を指定する事によりコンプリート機能をOFFにします。
PHP部分
<?php if($_POST['action'] == 'input_text02'){ $text = $_POST['text']; $input_submit_msg = '入力データは【'.$text.'】です。'; } ?>
■上記は、送信ボタンが挿入された時だけ処理され入力されたデータを表示します。
3.保存されたオートコンプリートデータを削除する方法
Windowsでブラウザが記憶したデータを消す方法は下記になります。
オートコンプリートのデータで↓キーで削除対象を選択しshift+deleteキーで削除します。
(firefoxの場合は↓キーで削除対象を選択しdeleteキーで削除します。)
2.パスワードのオートコンプリート
一般的にアカウントとパスワードを保存する処理は、サーバ側で許可したユーザをブラウザ側のクッキ情報として書き込む処理で行われます。
この時に使われる関数がsetcookie()、$_COOKIE[]になりますが、このサイトではこの解説は行っていません。
ここではブラウザ機能だけでアカウントとパスワードを保存させるか否かを行う機能を解説します。
1.パスワードを記憶させる方法
パスワードを保存させる場合は autocomplete='new-password' 属性を利用します。
この指定をすると「パスワードを保存するか」をブラウザが聞いてきます。
下記事例で、複数個のパスワードを記憶させてください。
[パスワード欄]をクリックするたびに、選択肢が増える事が確認できます。
上記のプログラムは下記のプログラムで構成されます。
HTML部分
<form action='' method='post'> <p> アカウント: <input type='text' name='u-id01' class='u-id01' value='' size='20' autocomplete='off'></p> <p> パスワード: <input type='password' name='pass01' class='pass01' value='' size='20' autocomplete='new-password'></p> <input type='hidden' name='position' value=''> <!-- 送信ボタンが挿入されて時にjQueryでValue値を設定します--> <button type='submit' name='action' value='input_pass01'>送信</button> </form> <p class='msg01' style='color:red;'><?php esc_html_e($input_submit_msg); ?></p><!-- submit後の表示エリア -->
■2行目:<input type='text'>
アカウント単独で保存したくないので autocomplete='off'を指定しています。
■3行目:<input type='password'>
アカウントとパスワードのセットで登録したいので autocomplete='new-password' を指定しています。
PHP部分
<?php if($_POST['action'] == 'input_pass02'){ $name = $_POST['u-id02']; $pass = $_POST['pass02']; $input_submit_msg = '【'.$name.'】と【'.$pass.'】が入力されました'; } ?>
■上記は、送信ボタンが挿入された時だけ処理され入力されたデータを表示します。
2.パスワードの自動入力
ブラウザにアカウントとパスワードが記憶されると、最新のアカウントとパスワードが自動でセットされます。
アカウント: パスワード: |
上記のボックスには下記HTMLが記述されています。
<p>アカウント: <input type='text' name='d1' value=''></p> <p>パスワード: <input type='password' name='d2' value=''></p>
しかし1行目を下記に変更すると、この自動入力をOFFにすることができます。
<p>アカウント: <input type='text' name='d1' value='dummy'></p>
上記ではアカウント欄にdummyが表示されるために自動入力がOFFになります。
3.パスワードの自動入力とオートコンプリートをOFFにする方法
下記の事例は、
①パスワードの自動入力をOFF
②パスワードのオートコンプリートもOFF
③新規パスワードも保存しない
にした事例です。試してみてください。
但し、PC版のfirefoxはオートコンプリートをOFFにすることはできません。
上記のプログラムは下記のプログラムで構成されます。
HTML部分
<form action='' method='post'> <p> アカウント: <input type='text' name='u-id02' class='u-id02' value=' ' size=20 autocomplete='off'></p> <p> パスワード: <input type='password' name='pass02' class='pass02' value='' size=20 ></p> <button type='submit' name='action' value='input_pass02'>送信</button> </form> <p class='msg01' style='color:red;'><?php esc_html_e($input_submit_msg); ?></p><!-- submit後の表示エリア -->
■2行目:<input type='text'>
アカウント単独で保存したくないので autocomplete='off'を指定しています。
value値はパスワードの自動入力をOFFにしたいために全角のスペースを入れています。
■3行目:<input type='password'>
パスワードを保存したくないので autocomplete='new-password' は指定していません。
script部分
<script> window.onload = function(){$(window).scrollTop(<?php esc_html_e($_POST['position']); ?>);}//画面の表示位置を指定します $(function(){ $('.u-id02').mousedown(function(){$('.u-id02').attr('value','');setTimeout(function(){$('.u-id02').focus();},0);return false;}); // タイマー処理でカーソルをフィールドにセットし、return falseで終了しています。 $('.pass02').mousedown(function(){setTimeout(function(){$('.pass02').focus();},0);return false;}); // 同上 }); </script>
■4行目:パスワード欄のオートコンプリートのOFFの処理
オートコンプリートは、マウスがダウンした時に起動されますが、Tabキーで入力エリアに来た時は起動しません。(firefoxはtabキーでも起動するのでオートコンプリートOFFはできません)
そこで、マウスがダウンを検知した時にタイマー0秒でカーソルをフォーカスさせてfalseで返すことによりコートコンプリートの起動を阻止しています。
■3行目:アカウント欄の処理
オートコンプリートにOFF処理の前に、全角スペースを削除する処理を入れています。
PHP部分
<?php if($_POST['action'] == 'input_pass02'){ $name = $_POST['u-id02']; $pass = $_POST['pass02']; $input_submit_msg = '【'.$name.'】と【'.$pass.'】が入力されました'; } ?>
■上記は、送信ボタンが挿入された時だけ処理され入力されたデータを表示します。
4.保存されたオートコンプリートデータを削除する方法
パスワードは、URLとアカウント、パスワードのセットでブラウザに保存されます。
表示画面の中にパスワードがあるとブラウザは下記メニュを表示し、削除等はこのメニュで行います。
<chomeの場合>
<Microsoft Edigeの場合>
<firefoxの場合>
firefoxはメニュ表示ではなくオートコンプリートダイアログの中のメニュで削除します。
参考情報
その他の イベント発生のメソッド も参照してください。