Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2011, 19:49
Новичок на форуме
Отправить личное сообщение для Демьян Посмотреть профиль Найти все сообщения от Демьян
 
Регистрация: 16.04.2011
Сообщений: 2

focus() не работает (полуработает)

Привет!

Заметил, что если при загрузке страницы с сервера слой невидим то после включения видимости этого слоя средствами 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;") сразу то фокус передаётся нормально.

Объясните пожалуйста, с чем это связано и как заставить правильно работать??
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2011, 20:13
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Демьян
<input id="pole" type="text" style="width:30px; display:none;"/>
<input id="pole" type="text" style="width:30px;"/>
когда контейнер делаешь видимым что мешает там же передать фокус инпуту?

Сообщение от Демьян
и как заставить правильно работать??
не нужно заставлять "правильно работать"-нужно сразу продумывать правильно алгоритм

Последний раз редактировалось dmitriymar, 16.04.2011 в 20:16.
Ответить с цитированием
  #3 (permalink)  
Старый 16.04.2011, 21:32
Новичок на форуме
Отправить личное сообщение для Демьян Посмотреть профиль Найти все сообщения от Демьян
 
Регистрация: 16.04.2011
Сообщений: 2

Сообщение от dmitriymar Посмотреть сообщение
<input id="pole" type="text" style="width:30px;"/>
когда контейнер делаешь видимым что мешает там же передать фокус инпуту?
Сначала я так и сделал, но тогда фокус не перемещался вообще, а когда поставил
<option value="1" onClick="document.getElementById('pallet').focus();">

фокус стал перемещаться, но после второго клика. На option пробовал ставить одновременно и включение видимости слоя с перемещением фокуса, тогда фокус вообще не перемещался, поэтому пока оставил как писал выше, но это бессмысленно, никто не будет щёлкать по нему два раза
Ответить с цитированием
  #4 (permalink)  
Старый 16.04.2011, 23:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Демьян,
Рабочий вариант ...
<!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>
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2012, 05:34
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Многострочный Вариант

<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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работает в Mozilla и не работает в IE Maxidrom Events/DOM/Window 4 27.02.2010 16:37
ява-скрипт выборочно работает-не работает zeta777 Internet Explorer 0 20.01.2010 11:41
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11
Скрипт меню-гармошки работает выборочно Extern Элементы интерфейса 2 23.02.2009 15:32