focus() не работает (полуработает)
:help:
Привет! Заметил, что если при загрузке страницы с сервера слой невидим то после включения видимости этого слоя средствами JS невозможно передать фокус текстовому полю формы, которое в этом слое содержится. Код примерно такой:
<form id="form" name="form">
<select name="spisok" id="spisok" style="width: 155px;"
onclick="
/* если выбран 1-й вариант из списка - включить слой "div" и передать фокус полю внутри него, иначе скрыть слой "div" */
if (this.value == '1' ) { document.getElementById('div').style.display = 'inline'; }
else {document.getElementById('div').style.display = 'none';);}">
<option selected="selected" value="0"></option>
<option value="1" onClick="document.getElementById('pole').focus();">1-я строка списка</option>
<div id="div" style="display:none;">
<input id="pole" type="text" style="width:30px; display:none;"/>
</div>
</form>
В результате при щелчке по 1-й строке списка слой становится видимым, но фокус не передаётся, пока не щёлкнешь по этой первой строке списка ещё раз. Если-же слой видим (style="display:inline;") сразу то фокус передаётся нормально. Объясните пожалуйста, с чем это связано и как заставить правильно работать?? |
Цитата:
когда контейнер делаешь видимым что мешает там же передать фокус инпуту? Цитата:
|
Цитата:
<option value="1" onClick="document.getElementById('pallet').focus();">
фокус стал перемещаться, но после второго клика. На option пробовал ставить одновременно и включение видимости слоя с перемещением фокуса, тогда фокус вообще не перемещался, поэтому пока оставил как писал выше, но это бессмысленно, никто не будет щёлкать по нему два раза :( |
Демьян,
Рабочий вариант ...
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form id="form" name="form">
<select name="spisok" id="spisok" style="width: 155px;"
onchange="if (this.value == '1' ) { document.getElementById('div').style.display = 'inline';
document.getElementById('pole').focus();}
else {document.getElementById('div').style.display = 'none'}">
<option selected="selected" value="0"></option>
<option value="1">1-я строка списка</option>
</select>
<div id="div" style="display:none;">
<input id="pole" type="text" style="width:30px;"/>
</div>
</form>
</body>
</html>
|
Многострочный Вариант
<div style="background-color:#fff">
<form id="form" name="form">
<select name="spisok" id="spisok" style="width: 155px;" onchange="Onchange(this.value);return true;">
<option selected="selected" value="0"></option>
<option value="1">1-я строка списка</option>
<option value="2">2-я строка списка</option>
<option value="3">3-я строка списка</option>
</select>
<span id=span>
<input id="pole1" type="text" value="1" style="width:30px;position:absolute;z-index:-100;"/>
<input id="pole2" type="text" value="2" style="width:30px;position:absolute;z-index:-100;"/>
<input id="pole3" type="text" value="3" style="width:30px;position:absolute;z-index:-100;"/>
</span>
</form>
</div>
<script type="text/javascript">
function Onchange (c) {
var a=document.getElementById('form')
var elems=a.getElementsByTagName('input')
for(var i=0; i<elems.length; i++) {
elems[i].style.zIndex = '-100';
}
a=a.document.getElementById('pole'+c);
a.style.zIndex = '12';
a.focus();
}
</script>
|
| Часовой пояс GMT +3, время: 01:47. |