ホームページ > 記事 > ウェブフロントエンド > focus() を使用して focus_javascript を設定できない JavaScript の解決策のヒント
昨日、セットトップ ボックスの EPG ページを変更したときに、小さな問題が発生しました。ユーザーがゲームを購入するときは、購入確認ダイアログ ボックスが表示される必要があります。ダイアログ ボックスのデフォルトのフォーカスは [キャンセル] ボタン上にある必要があります。非常に単純な要件は、JavaScript の focus() メソッドを使用して実現できます。簡単なコード例は次のとおりです:
document.getElementById("cancel").focus()
しかし、悲しいことに、セットトップボックスは本当に大きな落とし穴だということです。既存のすべてのセットトップ ボックス モデルと互換性がある必要があるため、8 つのセットトップ ボックスを適合させる必要があります。その後、何か問題が発生しました! ZTE B600 セットトップ ボックスは、キャンセル ボタンにフォーカスを設定することがまったくできません。以下は私の解決策です:
まず、セットトップ ボックスが getElementById() メソッドをサポートしているかどうか、および ID「cancel」を持つ要素が正常に取得されているかどうかを確認します。テスト メソッドは非常に簡単で、別の 02fde5a8a944abba2ddafe7a23d5494etest
を実行します。 最後に、「try...catch(e)...」を使用して、「focus()」が失敗した理由をキャプチャしましたtry(){ <span style="white-space:pre"> </span>document.getElementById("cancel").focus() }catch(e){ <span style="white-space:pre"> </span>alert(e.name + ": " + e.what()); }
しかし、それはただ奇妙です!上記の 2 つの手順の結果は、セットトップ ボックスが focus() と getElementById() をサポートしているが、フォーカスをポップアップ ダイアログ ボックスに設定できないことを示しています。
1時間以上苦戦した末、ついに大BOSSが現れ、たった一言で問題を解決! flur() を積極的に呼び出して元のフォーカスをキャンセルすることが可能です。
document.getElementById("purchase").flur()
それで問題は解決します。感謝しなければなりません!この問題を解決する過程で、私の考えは実際には非常に正しかったのですが、私の知識が明らかに十分ではありませんでした。一般のプログラマーと上級プログラマーの差は、問題解決のアイデアだけではなく、経験や知識にも差があります。