Może to być najbardziej niejasny błąd, z którym miałem do czynienia w ciągu wielu lat pracy z JavaScriptem i dowolną wersją przeglądarki Internet Explorer. Używamy YUI 2.7 dla niektórych (nie) metod wygody. Sigh, co bym zrobił dla jQuery ....JavaScript: Błąd widoczności w przeglądarce Internet Explorer podczas ustawiania fokusu na element wejściowy
Ma to wpływ na Internet Explorer 6 i Internet Explorer7. Internet Explorer 8 zachowuje się prawidłowo. Wszystkie inne przeglądarki również zachowują się poprawnie.
Problem: Kiedy ustawić ostrość na konkretnym elemencie, pojawia się następujący błąd:
Can't move focus to the control because it is invisible, not enabled, or of a type that does not accept focus.
więc mam div nazwie 'dodatek komentarz Login-overlay', który zawiera element wejściowy. Ten element div jest wyświetlany: brak, dopóki użytkownik nie kliknie jednego z kilku łączy o nazwie "login".
Poniżej znajduje się kod JavaScript, którego używam, który wybiera linki "login", które przesuwa pozycję "add-comment-login-overlay" w DOM, ustawia display: block, a następnie ustawia fokus pierwsze pole wprowadzania w nakładce. Właśnie ten proces ustawiania ostrości powoduje błąd, który napisałem powyżej.
//Get Login links in comment forms.
links = YAHOO.util.Dom.getElementsByClassName('addCommentLoginLink');
//Set click event for login links.
YAHOO.util.Event.addListener(links, "click", function(el){
//Stop link.
YAHOO.util.Event.preventDefault(el);
//Move login overlay in DOM.
if(el.srcElement){
var target = el.srcElement;
}else{
var target = el.currentTarget;
}
YAHOO.util.Dom.insertAfter(overlay, target.parentNode.parentNode.parentNode.parentNode);
//Set to visible.
YAHOO.util.Dom.setStyle(overlay,'display', 'block');
//Set focus to username field.
document.getElementById('add-comment-login-overlay-username-input').focus();
});
Mogę bezwzględnie potwierdzić, że nakładka div jest całkowicie widoczna. Mogę na to patrzeć. Dodałem timer setInterval do pomiaru tego, co się dzieje i nie ma on żadnego efektu. W pewnym momencie miałem 10 sekund na przejście między czasem, w którym nakładka była widoczna, a wywołaniem focus()
, a błąd nadal występuje. Poza błędem, formularz jest całkowicie funkcjonalny, inny niż ten błąd.
To jest uproszczona wersja kodu HTML nakładki jako odnośnika.
<div id="add-comment-login-overlay" class="add-comment-login-overlay" style="display: block;">
<div class="add-comment-login-overlay-content clearfix">
<div class="add-comment-login-overlay-signin clearfix">
<input type="text" tabindex="2001" id="add-comment-login-overlay-username-input"/>
<input type="password" tabindex="2002" id="add-comment-login-overlay-password-input"/>
</div>
</div>
</div>
Miałem ten problem w IE 8, ale myślę, że mój problem miał do czynienia z faktem, że formularz został otwarty przez wywołanie window.showModalDialog (...).To obejście działa doskonale dla mnie. Dzięki! – Sanjamal
To działało dla mnie w sprawie DotNetNuke! Dziękuję Crescent Fresh! –
Wygląda na to, że nadal istnieje w IE11, tylko tym razem jest to czas wystarczający na 500ms dla skuteczności. – Jason