#javascript #html #internet-explorer-8 #dojo #setfocus
#javascript #HTML #internet-explorer-8 #dojo #setfocus
Вопрос:
почему следующий код не фокусирует filteringselect?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://yandex.st/dojo/1.6.0/dojo/dojo.xd.js" djConfig="parseOnLoad: true"></script>
<style type="text/css">
@import "http://yandex.st/dojo/1.6.0/dijit/themes/claro/claro.css";
</style>
<script type="text/javascript">
<!--
dojo.require("dijit.form.FilteringSelect");
dojo.addOnLoad(function(){
dijit.byId('dept').focus();
});
-->
</script>
</head>
<body class="claro">
<select name="dept" id="dept" dojoType="dijit.form.FilteringSelect" >
<option value=""></option>
<option value="test">test</option>
<option value="test1">test1</option>
</select>
</body>
</html>
Я пробовал это с ie7 и firefox 3/4 — это работает.
но в ie8 это не удается:-(
может ли это быть ошибкой dojo — или я делаю что-то не так?
когда запускается dojo.addOnLoad()? после того, как DOM будет готов или после того, как все виджеты будут должным образом инициализированы?
с уважением
герхард
Ответ №1:
это очень интересная ошибка.. я провел небольшое исследование и нашел решение. возможно, это выглядит как «грязный взлом», но все же это может вам помочь.
вы можете просто добавить время ожидания:
dojo.addOnLoad(function () {
setTimeout(function () { dijit.byId('dept').focus() }, 400);
});
Пользователь не замечает, но это дает IE передышку.
Комментарии:
1. Интересно, что когда я пытаюсь это сделать, кажется, что даже установка 0 в качестве тайм-аута работает — это говорит о том, что достаточно просто отложить эту строку кода до завершения процесса ready. Не уверен, зачем это необходимо (и, по-видимому, конкретно только в IE 8); отвечая на вопрос Герхарда, обратные вызовы addOnLoad / ready выполняются после (1) готовности DOM (или
window.onload
в версиях, которые не поддерживаютDOMContentLoaded
), (2) загрузки всехdojo.require
общих модулей на данный момент и (3) еслиparseOnLoad
значение true, анализатор запущен и виджеты запущены.2. дальнейшие исследования вчера привели меня к тому же выводу. я поищу похожую ошибку в dojo-trac или создам новую!
Ответ №2:
Я не уверен, какие браузеры полностью поддерживают это, но вы могли бы попробовать:
<select name="dept" id="dept" dojoType="dijit.form.FilteringSelect" autofocus>
Кроме того, я не понимаю, почему вы используете Import
оператор, если вы могли бы просто использовать тег link:
Перед:
<style type="text/css">
@import "http://yandex.st/dojo/1.6.0/dijit/themes/claro/claro.css";
</style>
После:
<link rel="stylesheet" type="text/css" href="http://yandex.st/dojo/1.6.0/dijit/themes/claro/claro.css">
Комментарии:
1. Я сомневаюсь, что
autofocus
это даст эффект, поскольку этотselect
тег в конечном итоге будет заменен виджетом FilteringSelect, который не распознает ни одногоautofocus
атрибута.