В настройке Javascript текстовое поле с focus() не работает, если вызывается как дочернее окно

У меня есть простая тестовая страница, которая устанавливает фокус на текстовую область в функции oninit. Однако точный код не может этого сделать, если страница вызывается как дочерняя.

Помещение окна предупреждения доказывает, что функция oninit вызывается, но не может поместить фокус в текстовое поле. Однако нажатие на перезагрузку фокусирует правильно.

Итак, учитывая, что мой код отлично работает при вызове на главной странице, а также работает в дочернем, если вызывается reload, то почему он не работает с первого раза?

<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>

Здесь ничего хитрого, как вы можете, просто не работает, если страница загружается с помощью window.open("test2.html");


person Ian Smith    schedule 12.10.2013    source источник
comment
Что вы имеете в виду, если страница называется дочерней?   -  person jfriend00    schedule 12.10.2013
comment
@jfriend00 Думаю, он хотел window.open('')   -  person Dvir    schedule 12.10.2013


Ответы (2)


какой браузер вы используете? Я проверяю Firefox, Chrome и IE. Ваш код работает идеально и фокусируется на текстовой области.

Я создаю два файла test1.html и test2.html в одном каталоге. В test1.html я вставляю следующий код.

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

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

И в 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>

Затем я запускаю test1.html и нажимаю кнопку, и появляется test2.html с фокусом на текстовой области.

person Hasib Hasan Arnab    schedule 12.10.2013
comment
Я использую Google Chrome на своем Chromebook. Теперь я воспроизвел ошибку с вашим тестовым кодом, изменив вызов open на window.open('test2.html', , 'width=530px,height=230px'); - person Ian Smith; 12.10.2013
comment
В соответствии с вашим изменением я также меняю в window.open. Но код работает отлично и фокусируется на текстовом поле. - person Hasib Hasan Arnab; 12.10.2013
comment
Наконец-то узнал, как открыть порт 80 на хромбуке и подключил свой Mac. Тестовая страница работает должным образом с Safari, Chrome и Firefox на Mac. Похоже на ошибку в версии Chrome для Arm — вот почему это озадачило меня, поскольку я считал, что это должно было сработать. - person Ian Smith; 12.10.2013

Вы также можете использовать setTimeout независимо от события.

setTimeout(function() {
    document.getElementById("elementId").focus();
}, 0);
person Ishan Liyanage    schedule 13.11.2015
comment
Это использует jquery, когда проблема вызывает указанный javascript. Я знаю, что это похоже на расщепление волос, но бывают случаи, когда jquery может быть недоступен. - person Bueno; 12.07.2016
comment
Я знаю, но всегда лучше поставить альтернативные ответы, чтобы сообщество могло извлечь из них пользу, а не дублировать вопрос и повторно публиковать тот же ответ. Я думаю, вам лучше узнать о руководящих принципах сообщества. - person Ishan Liyanage; 12.07.2016
comment
Ишан Лиянагэ прав @Bueno. Мне просто помог его ответ. - person David Alves; 13.12.2017