1. ホーム
  2. javascript

HTML入力フィールドをクリックしてもフォーカスが当たらない

2023-07-17 15:30:42

質問

問題が発生し、何がこの動作を引き起こしているのかがわかりません。 私は入力フィールドにアクセスすることができず textarea にアクセスできません。

残念ながら、JS、HTML、CSSは非常に大きいので、ここにすべてを掲載することはできません。

この奇妙な動作をデバッグするときに、何を調べればよいのか、誰か教えてください。

アップデイト

にカーソルを合わせると input フィールドの上にカーソルを移動すると、テキストカーソルが表示されますが、それをクリックするとフィールドにフォーカスが当たりません。 フィールドにアクセスするには タブ キーを押してフィールドにアクセスでき、その上で右クリックしてからフィールドをクリックすると、そのフィールドにフォーカスが当たります。

...そして、いや、彼らには disabled または readonly 属性があります。)

どのように解決するのですか?

<ブロッククオート

クリックしてもフィールドにフォーカスが当たりません。

のデフォルトアクションをキャンセルしたようです。 マウスダウン イベントのデフォルトのアクションをキャンセルしたようです。 HTML と JS を検索して onmousedown ハンドラを探し、次のような行を探します。

return false;

この行は、クリックによるフォーカシングを止めている可能性があります。


Re: あなたのコメントですが、このハンドラを追加するコードを編集できないのでしょうか? もしできるのであれば、最も簡単な解決策は、単に return false; ステートメントを削除することです。

は、イベントトリガーを上書きせずに、機能だけを追加する方法はありますか?

それは、ハンドラがどのようにアタッチされるかによります。 伝統的な登録方法を使用して添付されている場合、たとえば 要素.onmousedown のように、伝統的な登録方法を用いている場合は、それ用のラッパーを作成することができます。

var oldFunc = element.onmousedown;
element.onmousedown = function (evt) {
    oldFunc.call(this, evt || window.event);
}

このラッパーは false を返さないので、要素のデフォルト・アクション(フォーカス)をキャンセルすることはありません。 もし、あなたのイベントが、次のような高度な登録方法を用いて添付されている場合 addEventListener または アタッチイベント の場合、関数名/参照を使用してイベントハンドラを削除し、上記のようなラップ関数で再度アタッチするだけです。 追加されたのが無名関数で、その参照を取得できない場合、唯一の解決策は、別のイベントハンドラをアタッチし、要素に手動でフォーカスするために 要素.focus() メソッドを使用して手動で要素をフォーカスすることです。