focus() を使用して focus_javascript を設定できない JavaScript の解決策のヒント

WBOY
リリース: 2016-05-16 16:37:24
オリジナル
1988 人が閲覧しました

昨日、セットトップ ボックスの EPG ページを変更したときに、小さな問題が発生しました。ユーザーがゲームを購入するときは、購入確認ダイアログ ボックスが表示される必要があります。ダイアログ ボックスのデフォルトのフォーカスは [キャンセル] ボタン上にある必要があります。非常に単純な要件は、JavaScript の focus() メソッドを使用して実現できます。簡単なコード例は次のとおりです:

document.getElementById("cancel").focus()
ログイン後にコピー

しかし、悲しいことに、セットトップボックスは本当に大きな落とし穴だということです。既存のすべてのセットトップ ボックス モデルと互換性がある必要があるため、8 つのセットトップ ボックスを適合させる必要があります。その後、何か問題が発生しました! ZTE B600 セットトップ ボックスは、キャンセル ボタンにフォーカスを設定することがまったくできません。以下は私の解決策です:

まず、セットトップ ボックスが getElementById() メソッドをサポートしているかどうか、および ID「cancel」を持つ要素が正常に取得されているかどうかを確認します。テスト メソッドは非常に簡単で、別の

test を実行します。 最後に、「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()
ログイン後にコピー

それで問題は解決します。感謝しなければなりません!この問題を解決する過程で、私の考えは実際には非常に正しかったのですが、私の知識が明らかに十分ではありませんでした。一般のプログラマーと上級プログラマーの差は、問題解決のアイデアだけではなく、経験や知識にも差があります。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート