Перемещение фокуса на текстовое поле в событии onchange

Я пытаюсь сделать так, чтобы при вводе определенного значения в текстовое поле фокус оставался на текстовом поле (и в процессе производства отображалось предупреждение). Я пытаюсь заставить это работать в Firefox 3.5.7, но безуспешно.

Как я могу сделать так, чтобы текстовое поле имело определенное значение в onchange, чтобы оно оставалось сфокусированным/перефокусированным на текстовом поле?

Живой пример находится по адресу http://jsbin.com/ipina.

<body>
Enter your name: <input type="text" name="fname" id="fname" onchange="
  if(this.value=='foo'){
    this.select();
    this.focus();
  }
  "  />
</body>

Кроме того, я не получаю никаких ошибок или предупреждений javascript в консоли ошибок при выполнении этого кода.


person Earlz    schedule 19.01.2010    source источник
comment
Вы пытаетесь заставить фокус оставаться на этом текстовом поле? Разве у него не будет фокуса, если пользователь изменит его?   -  person brian    schedule 20.01.2010
comment
Нет, событие onchange не будет вызываться (в firefox и IE для текстовых полей), пока элемент управления не потеряет фокус   -  person Earlz    schedule 20.01.2010


Ответы (2)


Когда запускается событие onchange, пользователь фокусируется на текстовом поле.

Возможно, вы захотите использовать событие blur, чтобы переориентировать текстовое поле, если значение равно 'foo'.

Если вам нужны мгновенные результаты, вы должны использовать onkeyup.

<body>
Enter your name: <input type="text" name="fname" id="fname" onkeyup="
  if(this.value=='foo'){
    this.select();
    this.focus();
  }
  "  />
</body>
person Jacob Relkin    schedule 19.01.2010
comment
Мне нужно ввести все значение, прежде чем я смогу оценить, должно ли текстовое поле оставаться сфокусированным или нет. - person Earlz; 20.01.2010

В соответствии с Javascript onchange отличается в IE и FireFox, мне нужно было установить фокус после события onchange, поэтому мне пришлось получить что-то вроде этого:

Enter your name: <input type="text" name="fname" id="fname" onblur="
  if(this.value=='foo'){
    alert('bah');
    setTimeout('document.getElementById(\'fname\').focus();document.getElementById(\'fname\').select();',0);
  }
  "  />

А еще мне приходилось ловить его при потере фокуса, не обязательно при изменении текста, поэтому пришлось использовать onblur вместо onchange.

Прямой эфир: http://jsbin.com/ofeva

person Earlz    schedule 19.01.2010