Nota: una possibile soluzione deve funzionare solo in Firefox 3.0, la mia app non consente l'accesso da IE! =)Modifica della messa a fuoco di Javascript nell'evento onClick?
ho un link che, se cliccato, verrà visualizzato un lightbox per l'utente:
<a href="#" onclick="show_lightbox();return false;">show lightbox</a>
mio problema è che quando viene visualizzato il lightbox, il focus rimane sul link. Quindi, se l'utente preme i tasti su o giù, finiscono per scorrere il documento principale, non il lightbox che viene visualizzato!
Ho cercato di impostare la messa a fuoco l'elemento lightbox utilizzando il codice come questo
function focus_on_lightbox() {
document.getElementById('lightbox_content').focus();
}
Questo funziona bene se digito nella console Firebug, ma non funziona se comprendo che alla fine dello snippet onclick. Sembra come se non riesco a spostare l'attenzione dal collegamento dal codice eseguito all'interno dell'evento onclick?
- Update 1 Ho provato qualcosa di simile prima
<a href="#" onclick="show_lightbox();focus_on_lightbox();return false;">show lightbox</a>
e ho funzione per aggiungere un po 'di output di debug modificati, come segue
function focus_on_lightbox() {
console.log('hihi');
console.log(document.activeElement);
document.getElementById('lightbox_content').focus();
console.log(document.activeElement);
}
L'uscita è il seguente
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="#">
Quindi il focus prima di fare qualcosa era sul link e dopo aver provato a cambiare lo stato attivo rimaneva ancora sul link?
Non sono sicuro se è importante, ma io uso ajax per caricare il lightbox, come segue
new Ajax.Updater(lightbox_content_id, url, {asynchronous:true, evalScripts:true, onLoading:show_lightbox_loading(), onComplete:focus_on_lightbox() });
ho cercato di impostare la messa a fuoco dopo l'ajax completo, ma anche, senza fortuna.
Cosa mi manca?
Ho cercato di fare un lavoro di soluzione che è stata suggerita di seguito cercando di impostare la messa a fuoco, vedere se ci sono riuscito controllando document.activeElement, in caso contrario, attendere 100 millisecondi e riprovare. Se uso la seguente funzione, funzionerà
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;
}
}
Tuttavia, se mi tolgo la statment console.log Firebug il debug, la funzione smette di funzionare !! Non ho idea del perché questo sarebbe il caso ?? Perché l'output di una variabile sulla console di Firebug influisce sul focus del meteo spostato sull'elemento o no? L'istruzione console.log influisce sull'attenzione? forse portando l'attenzione sulla finestra di debug della console?
se non fossi occupato a modificare il post originale, avrei detto questo. – Triptych
In realtà questa è stata una delle prime cose che ho provato e non ha funzionato. Modificherò la domanda originale con maggiori dettagli. – Janak