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();