У меня есть следующая функция в JavaScript, каждая часть оператора if выполняется правильно, за исключением возврата фокуса на элемент, который вызвал функцию. Это не работает в IE или Fire Fox, и ни один браузер не выдает мне ошибку. Мне это кажется правильным ... Почему не работает?

function check(x){

     //doing some stuff

     if (uc_check == false){
          window.alert('Houston, we have a problem.');
          document.getElementById(x).value = '';
          document.getElementById(x).focus(); //this line is not working 
     }
}

P.S. Я вызываю эту функцию из ввода формы следующим образом:

onchange="check(this.id)"
3
ubiquibacon 22 Июн 2010 в 09:06

2 ответа

Лучший ответ

Проблема здесь в том, что когда функция onChange завершает свою работу, она устанавливает фокус на следующий элемент. Таким образом, любой фокус, который вы установили в этой функции, исчезнет только после завершения onChange.

Вы можете обойти это несколькими способами. Наверное, самый простой - использовать тайм-аут.

Измените линию фокуса на следующее:

var el = document.getElementById(x);
window.setTimeout(function(){el.focus();}, 100);
7
desau 22 Июн 2010 в 05:50

У вас уже есть ссылка на элемент (this), поэтому вам не нужно передавать идентификатор:

<input onchange="check(this);">

И JS:

function check(el) {
    if (uc_check == false) {
        el.value = '';
        el.focus();
    }
}
2
nickf 22 Июн 2010 в 05:14