Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Фокусировка input


Автор: sinij 26.12.2006, 15:21
Есть страница с использованием Ajax (простая таблица)
когда щелкаем по ячеке то появляется текстовое поле и как передать фокус в это текстовое поле
простой метод focus() в конце всего кода не помогает (объект input появляется позже) 

Автор: Sardar 26.12.2006, 15:31
Цитата(sinij @  26.12.2006,  14:21 Найти цитируемый пост)
простой метод focus() в конце всего кода не помогает (объект input появляется позже)  

Странная логика... Передать фокус можно только по .focus() из скрипта, а твоя задача уже вызвать сей метод когда нужно. Худший вариант: ставь на таймер setTimeout(). Если пошевелить мозгами, то можно отследить у себя в коде когда ты создаёшь поле и после создания поставить фокус.

Приведи код, разберёмся.

Автор: sinij 26.12.2006, 15:41
Вот код
Код

function sh_marks(p, el){
 if(p==null)p="?id=0";
 if(document.getElementById("id_cell").value=="" || document.getElementById("id_cell").value!=el){
 if(xmlHttp){
  try{
   id_el=el;
   xmlHttp.open("GET", "http://192.168.0.5/cgi-bin/addons.cgi"+p, true);
   xmlHttp.setRequestHeader("Content-Type", "text/plain");
   xmlHttp.setRequestHeader("Accept-Language", "ru, en");
   xmlHttp.setRequestHeader("Accept-Charset", "windows-1251;q=1");
   xmlHttp.onreadystatechange = handleRequestStateChange;
// вывели текстовое поле
   xmlHttp.send(null);
   document.getElementById("id_cell").value=el;
// ади и нейм текстого поля которое выпало 'T'+el.substring(1, el.length)
   document.getElementById('T'+el.substring(1, el.length)).focus();
  }
  catch(e){
   alert("Неможливо з'єднатися з сервером "+e.toString());
  }
 }
}
 else{
    
 }
}


код в принципе книжный ничего особеннго только фокус неудается передать

Автор: zera 26.12.2006, 22:38
фокус на полученный аяксом элемент надо ставить в функции handleRequestStateChange

Автор: Sardar 26.12.2006, 23:30
sinij, отложи пока асинхронный аякс в сторону, пока не разберёшься что к чему. Замени true на false в xmlHttp.open. Это остановит выполнение скрипта пока ответ не придёт. Галимо конечно, но под твою логику пойдёт.

Когда захочешь использовать асинхронные запросы (на .send() тред не засыпает), то как уже сказал zera, ставь фокус в handleRequestStateChange. Проще конечно handleRequestStateChange заменить своим closure (замыкания, если не знаешь что это, вбей в поиск).

Автор: sinij 27.12.2006, 10:55
Цитата(Sardar @ 26.12.2006,  23:30)
sinij,то как уже сказал zera, ставь фокус в handleRequestStateChange. 

Большое спасибо все заработало

Автор: UnWarrioR 15.2.2007, 00:50
Помогите с такой проблемой 

дето на страничке есть код

Код
..
<td><br>

      <center>
      <font size="2">
      Поиск по сайту<br>
          <input maxlength="32"  name="Edit3" size="12" type="text" id="find_t">
           <input value="Поиск"  type=button onfocus="error2()" onClick="find_text()">
          </font>
      </center>
<br>

...



а вот и сама функция, на фокусе

Код
function error2()
{
if (Edit3.value =="") 
alert ('Вы не ввели данные для поиска !!')
}



Проблема в том что  я ищю текст не ссылкой а, type=button, и поэтому если Edit1 пуст то при фокусе на кнопку алерт выводит ошибку, вроде всё как надо, но фокус остаётся на кнопке, и нажатие F5 или повторно на кнопку приводет к постоянному выскакиванию данного алерта 

что надо дописать сюда чтобы после алерта фокус с кнопки снимался
Код

....
if (Edit3.value =="") 
alert ('Вы не ввели данные для поиска !!')
???????
.....

Автор: zera 16.2.2007, 11:30
blur() smile

Автор: SelenIT 16.2.2007, 12:13
а лучше передавать фокус на поле, которое юзеру следует подкорректировать - this.form.Edit3.focus();

Автор: Sardar 16.2.2007, 15:17
Убрать onfocus с кнопки, проверять по onclick (что логичней).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)