キャンセルあり キャンセルなし スペースキー エンターキー マウス左ボタン その他
アンカー1 アンカー2 完成 注1 完成 注1
完成 注1 完成 注1 完成 注1
チェックボックス1-1 チェックボックス1-2 チェックボックス2-1 チェックボックス2-2 完成 注1 完成 注1
ラジオボタン1-1 ラジオボタン1-2
ラジオボタン2-1 ラジオボタン2-2
完成 注1 完成 注1 完成 注1 ※これはdiv+aタグで作ったラジオボタンです。
完成 注1 完成 注1 完成 注1 ※これはli+aタグで作ったプルダウンです。
完成 注1 注3 完成 注1 キーボードによる文字入力抑止はフォーカスを強制的に外す方法にした。 注2
完成 注1 注3 完成 注1 注3 完成 注1 キーボードによる文字入力抑止はフォーカスを強制的に外す方法にした。 注2
ラジオボタン1-1 ラジオボタン1-2 ラジオボタン2-1 ラジオボタン2-2 完成 注1 Mac Safariがだめ 注1 注4 ※これはブラウザ標準のラジオボタンです。
制御しきれないので上のdiv+aタグで作ったラジオボタンへの置き換えを推奨します。
十字キー(左上右下(37,38,39,40))のkeydownキャンセルを移動先もみて判定する必要があり、超難
Firefoxがだめ。※注5 完成 注1 完成 注1 ※これはブラウザ標準のプルダウンです。
制御しきれないので上のli+aタグで作ったプルダウンへの置き換えを推奨します。
十字キー(左上右下(37,38,39,40))のkeydownキャンセルを移動先もみて判定する必要があり、超難
注1:linux版Cromium80とlinux版Firefox68と、windows10のIE11、Edge44、Chrome83、Edge83、Firefox68で確認済み。Mac Safari確認済み。iPad Safariは未確認。
注2:キーボードによる文字入力抑止はキャンセルする方法ではIME入力が防げないため、フォーカスを強制的に外す方法に変更した。linux版Cromium80とlinux版Firefox68とMac Safari確認済み。windows10未確認。iPad Safariは未確認。
注3:Macはテキストボックスとテキストエリアにおいては、スペースキーやエンターキーのキャンセルが効かなかったが、注2のフォーカスを強制的に外す方法で入力不可にできた。
注4:Macはマウスクリックで、ラジオボタンにチェックがついてしまう。
注5:Firefoxはスペースキーで、セレクトボックスが開いてしまう。

■仕掛け
・ボタン2を押すと、javaScriptで「ボタン1のonclick」を強制起動するようにした。
・アンカー2を押すと、javaScriptで「アンカー2のonclick」を強制起動するようにした。
・エンターキー(13)やスペースキー(32)で左の「キャンセルあり」のエレメントを押し場合は、keydownイベントをキャンセルするようにした。
・Firefoxにおいて、スペースキー(32)で、エレメントの種類がボタン、ラジオボタン、チェックボックスを押した場合は、keydownイベントをキャンセルしてもclickイベントが動くためclickイベントもキャンセルするようにした。
・マウスボタンで、左の「キャンセルあり」のエレメントを押し場合は、mousedownイベントをキャンセルするようにした。
・マウスの左ボタンを押した場合は、mousedownイベントをキャンセルしてもclickイベントが動くためclickイベントもキャンセルするようにした。
・テキストボックス2にキーボードで文字を入力すると、JavaScriptで「テキストボックス1のtext」へ強制書き込むようにした。
・テキストエリア2にキーボードで文字を入力すると、JavaScriptで「テキストボックス1のtext」へ強制書き込むようにした。
・テキストボックス1へキーボードによる文字入力ができないように、テキストボックス1にカーソルが来たらカーソルを強制的に外すようにした。
・テキストエリア1へキーボードによる文字入力ができないように、テキストエリア1にカーソルが来たらカーソルを強制的に外すようにした。

■結果
・エンターキー(13)やスペースキー(32)でボタン1を押してもボタン1のonclickイベントは動かない。
・エンターキー(13)やスペースキー(32)でボタン2で押したらボタン1のonclickイベントは動く。
・マウスで、ボタン1を押してもボタン1のonclickイベントのonclickイベントは動かない。
・マウスで、ボタン2で押したらボタン1のonclickイベントは動く。
・テキストボックス2にキーボードで文字を入力するとテキストボックス1が転記される。
・テキストボックス1へキーボードによる文字入力はできなくする。
・テキストエリア2にキーボードで文字を入力するとテキストエリア1が転記される。
・テキストエリア1へキーボードによる文字入力はできなくする。
注1:linux版Cromium80とlinux版Firefox68と、windows10のIE11、Edge44、Chrome83、Edge83、Firefox68で確認済み。Mac Safari確認済み。iPad Safariは未確認。
注2:キーボードによる文字入力抑止はキャンセルする方法ではIME入力が防げないため、フォーカスを強制的に外す方法に変更した。linux版Cromium80とlinux版Firefox68とMac Safari確認済み。windows10未確認。iPad Safariは未確認。
注3:Macはテキストボックスとテキストエリアにおいては、スペースキーやエンターキーのキャンセルが効かなかったが、注2のフォーカスを強制的に外す方法で入力不可にできた。
注4:Macはマウスクリックで、ラジオボタンにチェックがついてしまう。
注5:Firefoxはスペースキーで、セレクトボックスが開いてしまう。


参考サイト
ボタンクリックイベントを強制的に起こすマウスイベントの基本jQueryのイベントmousedown&mouseupイベント後のクリックイベントを防止するキーコード一覧イベント処理のキャンセル方法jQuery のバブリング、preventDefault() や stopPropagation() の使用例jQuery イベント誰よりも先にイベントリスナを呼び出すマウスでクリックされたボタンを取得するフォームの入力キャンセルはどのイベントをキャンセルするのjQueryでIME入力確定時にイベントを発行するフォーム inputのpatternを使って、電話番号・郵便番号・フリガナ・空白などを判別する方法正規表現を可視化してまとめたチートシート JavaScriptでフォーカス移動する方法