2013-10-12 5 views
8

Ich habe eine einfache Testseite, die den Fokus auf eine Textarea auf einer Oninit-Funktion setzt. Der genaue Code schlägt jedoch fehl, wenn die Seite als untergeordnetes Element aufgerufen wird.In Javascript Einstellung ein Textfeld mit Fokus() funktioniert nicht, wenn als Kind-Fenster aufgerufen

Durch das Setzen der Warnmeldung wird bestätigt, dass die oninit-Funktion aufgerufen wird, der Fokus jedoch nicht in das Textfeld geschrieben werden kann. Durch erneutes Laden wird jedoch korrekt fokussiert.

Also, dass mein Code perfekt funktioniert, wenn auf einer Hauptseite aufgerufen wird, und funktioniert auch in einem Kind, wenn Neuladen aufgerufen wird, warum funktioniert es nicht das erste Mal?

<html> 
<body onload="init()"> 
<script type="text/javascript"> 
function init() 
{ 
    document.getElementById("message").focus(); 
} 

</script> 
<textarea id="message" rows=10 cols=40></textarea> 
</body> 
</html> 

Nichts schlaues hier, wie Sie können, nur funktioniert nur nicht, wenn die Seite von window geladen wird.open ("test2.html");

+1

Was meinen Sie mit "wenn die Seite als Kind angerufen wird"? – jfriend00

+0

@ jfriend00 Ich denke er meinte zu 'window.open ('')' – Dvir

Antwort

4

Welchen Browser verwenden Sie? Ich check in Firefox, Chrom & IE. Ihr Code läuft perfekt und konzentriert sich auf den Textbereich.

Ich erstelle zwei Dateien test1.html und test2.html in einem selben Verzeichnis. In test1.html i legen Sie die die follwing Code ..

<html> 
<body> 
<script type="text/javascript"> 
function init() 
{ 
    window.open('test2.html'); 
} 

</script> 
<button onclick="init()">test</button> 
</body> 
</html> 

Und in test2.html ..

<html> 
<body onload="init()"> 
<script type="text/javascript"> 
function init() 
{ 
    document.getElementById("message").focus(); 
} 

</script> 
<textarea id="message" rows=10 cols=40></textarea> 
</body> 
</html> 

als ich die test1.html laufen und klicken Sie auf die Schaltfläche und test2.html erscheint mit Fokus auf den Textbereich.

+0

Ich benutze Google Chrome auf meinem Chromebook. Ich habe jetzt den Fehler mit Ihrem Testcode reproduziert, indem ich den offenen Aufruf von window.open geändert habe ('test2.html', "", 'width = 530px, height = 230px'); –

+0

Gemäß Ihrer Änderung ändere ich auch in window.open. Aber der Code funktioniert perfekt und konzentriert sich auf den Textbereich. –

+0

Endlich herausgefunden, wie man Port 80 auf dem Chromebook öffnet und meinen Mac verbindet. Die Testseite funktioniert wie erwartet mit Safari, Chrome und Firefox auf dem Mac. Sieht also aus wie ein Bug mit der Arm-Version von Chrome - deswegen hat mich das verwirrt, weil ich glaubte, es hätte funktionieren müssen. –

0

Sie können setTimeout auch unabhängig vom Ereignis verwenden.

setTimeout(function() { 
    $('#elementId').focus(); 
}, 0); 
+0

Dies nutzt jquery, wenn das Problem spezifizierte Javascript aufgerufen hat. Ich weiß, es scheint wie Haare zu spalten, aber es gibt Fälle, in denen jQuery möglicherweise nicht verfügbar ist. – Bueno

+1

Ich weiß, aber es ist immer besser, eine alternative Antworten zu setzen, damit die Gemeinschaft von ihnen profitieren kann, anstatt die Frage zu duplizieren und die gleiche Antwort zu wiederholen. Ich denke, du solltest besser über die Richtlinien der Gemeinschaft lernen. –

+0

Ishan Liyanage ist rechts @ Bueno. Ich wurde gerade von seiner Antwort unterstützt. –

Verwandte Themen