Document.getElementById(id).focus() не работает для firefox или chrome

Когда я когда-либо делаю событие onchange, он входит в эту функцию для его проверки, но фокус не начинается. Я использую document.getElementById('controlid').focus();

Я использую Mozilla Firefox и Google Chrome, так как он не работает. Я не хочу никакого IE. Может ли кто-нибудь сказать мне, что может я по этой причине.

Заранее спасибо

Здесь код:

var mnumber = document.getElementById('mobileno').value; 
if(mnumber.length >=10) {
    alert("Mobile Number Should be in 10 digits only"); 
    document.getElementById('mobileno').value = ""; 
    document.getElementById('mobileno').focus(); 
    return false; 
}

Ответ 1

Попробуйте использовать таймер:

var mnumber = document.getElementById('mobileno').value;
if (mnumber.length >=10) 
{ 
    alert("Mobile Number Should be in 10 digits only");
    document.getElementById('mobileno').value = "";
    window.setTimeout(function ()
    {
        document.getElementById('mobileno').focus();
    }, 0);
    return false;
}

Таймер с отсчетом 0 будет работать, когда поток станет холостым. Если это не поможет, попробуйте использовать код (с таймером) в событии onblur.

Ответ 2

2 вопроса, если focus() не работает:

  • используйте эту функцию после добавления к родительскому
  • Если выбран консоль, после обновления страницы элемент не будет получать фокус, поэтому выберите (нажмите) веб-страницу во время тестирования.

Этот способ работает как в Firefox, так и в Chrome без setTimeOut().

Ответ 3

window.setTimeout(function () { 
    document.getElementById('mobileno').focus(); 
}, 0); 

Это сработало и для меня. Firefox установил значение моего элемента, но не придавал ему фокуса.

Ответ 4

Не все элементы являются настраиваемыми, но по умолчанию, для исправления есть атрибут tabindex.

Когда вы назначаете tabindex = элементу:

Он становится фокусируемым. Пользователь может использовать клавишу табуляции, чтобы перейти от элемента с меньшим положительным tabindex к следующему. Исключением является специальное значение tabindex = "0" означает, что элемент всегда будет последним. Tabindex = -1 означает, что элемент становится настраиваемым, но клавиша табуляции всегда будет пропускать его. Только метод focus() будет работать

Ответ 5

Мой случай был немного другим. Я пытался сделать focus() вход из консоли разработчика браузера. Оказывается, это каким-то образом мешало входным данным, и как только я минимизировал консоль, все работало , как ожидалось. Я понимаю, что это не программное решение, но на случай, если кто-то найдет это в поисковой системе jist, как я, возможно, эта информация может помочь.

Ответ 6

Еще одна вещь, которую нужно добавить в этот список:

Убедитесь, что элемент, который вы пытаетесь сфокусировать, сам по себе и не содержится в элементе с "display: none" в то время, когда вы пытаетесь сфокусировать его.

Ответ 7

Для возврата фокуса для повторного ввода текстового поля пароля в javascript:

window.setTimeout(function() { document.forms["reg"]["retypepwd"].focus(); },0);

Здесь reg - имя регистрационной формы.

Ответ 8

Я знаю, что это может быть эзотерическим прецедентом, но я изо всех сил пытался получить ввод, чтобы сосредоточиться при использовании рамки Angular 2. Вызов фокуса() просто не работал, неважно, что я сделал.

В конечном итоге я понял, что Angular подавляет его, потому что я не установил на вход [(ngModel)]. Постановка решала его. Надеюсь, это поможет кому-то.

Ответ 9

Вы пытаетесь ссылаться на элемент до завершения загрузки DOM?

Ваш код должен находиться в загрузке тела (или другой функции, которая должна выполняться при загрузке DOM, например $(document).ready() в jQuery)

body.onload = function() { 
    // your onchange event handler should be in here too   
    var mnumber = document.getElementById('mobileno').value; 
    if(mnumber.length >=10) {
        alert("Mobile Number Should be in 10 digits only"); 
        document.getElementById('mobileno').value = ""; 
        document.getElementById('mobileno').focus(); 
        return false; 
    }    
}

Ответ 10

Убедитесь, что вы используете "id" и "getElementById", как показано ниже:

<FORM id="my_form" name="my_form" action="">
<INPUT TYPE="text" NAME="somefield" ID="somefield" onChange="document.getElementById('my_form').submit();">
</FORM>

Ответ 11

Добавьте элемент управления, где вы хотите установить фокус, затем измените его свойство, как показано ниже

<asp:TextBox ID="txtDummy" runat="server" Text="" Width="2" ReadOnly="true" BorderStyle="None" BackColor="Transparent"></asp:TextBox>

В кодовом коде просто позвоните, как показано ниже. txtDummy.Focus()

этот метод работает во всех браузерах.

Ответ 12

Ваш фокус работает перед возвратом false;, После этого не работает. Вы попробуете это решение. Контроль после возврата false;

Вставьте код в функцию:

function  validateNumber(){
    var mnumber = document.getElementById('mobileno').value; 
    if(mnumber.length >=10) {
        alert("Mobile Number Should be in 10 digits only"); 
        document.getElementById('mobileno').value = ""; 
        return false; 
    }else{
        return true;
    }
}

Функция вызывающего абонента:

function submitButton(){
        if(!validateNumber()){
            document.getElementById('mobileno').focus();
            return false;
        }
}

HTML:

Input:<input type="text" id="mobileno">
<button onclick="submitButton();" >Submit</button>

Ответ 13

Я подозреваю, что причина этого в том, что рендеринг браузера выполняется в том же потоке, что и javascript, и setTimeout (function() {}, 0); ставит в очередь функцию javascript внутри setTimeout для выполнения при запуске браузера. Если у кого-то есть более подробные объяснения, пожалуйста, поделитесь им.

setTimeout(function(){ 
 if(document.getElementById('mobileno')){
  document.getElementById('mobileno').focus();
 } 
},0);

Ответ 14

Поместите этот источник над вашим модальным:

<script>
$('body').on('shown.bs.modal', '#IdYourModal', function () {
    document.getElementById('mobileno').focus();
})
</script>

Ответ 15

Я также рекомендую вам функцию jQuery focus(). Ваша жизнь станет проще:) Некоторое время назад у меня возникла проблема с фокусом (без jQuery), и я сдался.

Ответ 16

Тайм-аут, предложенный выше, работал вокруг проблемы в Chrome. В IE8 или FF3 не было проблем. Спасибо за подсказку, как всегда. Мой код, который задал фокус, который работал: window.setTimeout(function() { document.form1.password.focus(); },0);

Ответ 17

Если у вас есть доступ к jQuery или Zepto.js, это работает

$('#mobileno').focus();