注:考えられる解決策はFirefox 3.0でのみ機能する必要があり、私のアプリはIEからのアクセスを許可していません!=)
クリックすると、ユーザーにライトボックスを表示するリンクがあります。
<a href="#" onclick="show_lightbox();return false;">show lightbox</a>
私の問題は、ライトボックスが表示されているときに、リンクにフォーカスが残っていることです。したがって、ユーザーが上キーまたは下キーを押すと、表示されているライトボックスではなく、メインドキュメントがスクロールされてしまいます。
このようなコードを使用して、ライトボックス要素にフォーカスを設定しようとしました
function focus_on_lightbox() {
document.getElementById('lightbox_content').focus();
}
これは、firebugコンソールに入力すると正常に機能しますが、onclickスニペットの最後に含めると機能しません。onclickイベント内で実行されたコードからリンクからフォーカスを変更できないように見えますか?
-アップデート1私は以前にこのようなことを試しました
<a href="#" onclick="show_lightbox();focus_on_lightbox();return false;">show lightbox</a>
次のように、デバッグ出力を追加するように関数を変更しました
function focus_on_lightbox() {
console.log('hihi');
console.log(document.activeElement);
document.getElementById('lightbox_content').focus();
console.log(document.activeElement);
}
出力は次のとおりです
hihi
<a onclick="closePopup();lightbox('apartment_detail','11619');focus_on_lightbox();return false;" href="#">
<a onclick="closePopup();lightbox('apartment_detail','11619');focus_on_lightbox();return false;" href="#">
それで、私が何かをする前の焦点はリンクにありました、そして私が焦点を変えようとした後、それはまだリンクに残っていましたか?
重要かどうかはわかりませんが、次のようにajaxを使用してライトボックスをロードします
new Ajax.Updater(lightbox_content_id, url, {asynchronous:true, evalScripts:true, onLoading:show_lightbox_loading(), onComplete:focus_on_lightbox() });
ajaxが完了した後、フォーカスを設定しようとしましたが、運がありませんでした。
私は何が欠けていますか?
フォーカスを設定し、document.activeElementをチェックして成功したかどうかを確認することで、以下に提案するソリューションを機能させようとしています。成功しなかった場合は、100ミリ秒待ってから再試行してください。次の機能を使えば動作します
function focus_on_lightbox() {
var seconds_waited = 0
pause(100);
var current_focus = document.activeElement
while (document.getElementById(lightbox_content_id) != current_focus && seconds_waited < 2000)
{
document.getElementById(lightbox_content_id).focus();
console.log(document.activeElement);
pause(100);
current_focus = document.activeElement
seconds_waited += 100;
}
}
ただし、firebug debug statment console.logを削除すると、関数が機能しなくなります。なぜそうなるのか分かりませんか?変数をfirebugコンソールに出力すると、天気のフォーカスが要素に移動するかどうかに影響するのはなぜですか?console.logステートメントはフォーカスに影響しますか?おそらく、コンソールのデバッグウィンドウにフォーカスを移すことによってですか?