Як встановити курсор на поле введення в Javascript?


80
document.getElementById(frmObj.id).value="";
document.getElementById(frmObj.id).autofocus;
document.getElementById("errorMsg").innerHTML = "Only numeric value is allowed";

У наведеному вище коді значення об’єкта форми ідеально налаштовано, ""але в текстовому полі немає курсору. Я хочу, щоб там був курсор. focus()лише фокусує це поле введення, але насправді не встановлює курсор.


1
document.getElementById(fieldID).focus();слід помістити миготливий курсор у поле форми, якщо у вас немає чогось іншого, що захоплює фокус на сторінці. Заява з .autofocus у вас зараз нічого не робить
mplungjan

1
.focus()встановлює курсор. У цьому весь сенс фокусної дії.
Майстер тіней робить щеплення

1
якщо фокус не працює, я спробував би натиснути ()
Орієсок Власький

2
Майбутні читачі: також переконайтеся, що елемент, на який ви націлюєтесь, додано до DOM. Я створював елементи в сценарії і закликав focus () на них, перш ніж додати їх. Переключення замовлення вирішило проблему для мене.
Метью Р.

Відповіді:


107

У JavaScript спочатку зосередьтеся на елементі управління, а потім виберіть елемент керування для відображення курсору на текстовому полі ...

document.getElementById(frmObj.id).focus();
document.getElementById(frmObj.id).select();

або за допомогою jQuery

$("#textboxID").focus();

12
У відібраному немає потреби. З його кодом відбувається щось інше. Можливо, вбудований PDF або подібний
mplungjan

1
я хочу, щоб курсор знаходився там у текстовому полі. я не повинен натискати в текстовому полі, щоб ввести значення.
yukti kamra

Насправді, у моєму випадку вибраний змусив код НЕ працювати. Ви просто хочете фокус ();
Грег Бласс

56

Я усвідомлюю, що це досить давнє запитання, але я маю „дурне” рішення подібної проблеми, яке, можливо, могло б комусь допомогти.

Я зіткнувся з тією ж проблемою з текстовим полем, яке відображалося як вибране (методом Focus у JQuery), але курсор не було введено.

Справа в тому, що у мене було відкрито вікно налагоджувача, щоб побачити, що відбувається, і ТЕ вікно крало фокус. Рішення банально просте: просто закрийте налагоджувач, і все гаразд ... 1 година, витрачена на тестування!


Я намагався зробити <span>елемент цілеспрямованим, і це в кінцевому підсумку стало проблемою (радий, що прокрутив пройшов першу прийняту відповідь). Я також виявив, що є елементи html, які не фокусуються за замовчуванням (здається, для певного браузера). <span>Елемент є одним з тих елементів , які саме тому Chrome (версія 57) дала фокус на вікно інструментів розробника.
larrylampco

Ці коментарі заощадили мені хвилини, аніж години!
user1503941

7

Іноді ви отримуєте фокус, але курсор у текстовому полі відсутній. У цьому випадку ви зробите це:

document.getElementById(frmObj.id).select();

Так, це правильно колись, коли відбувається перехід .focus () не буде працювати, вам доведеться використовувати $ ("element") [0] .select (), щоб отримати курсор
imal hasaranga perera

1
або el.setSelectionRange (el.value.length, el.value.length); щоб отримати курсор у кінці рядка.
Вектор

Примітка: setSelectionRangeНЕ працюватиме на<input type="number"/>
Вандеш

2

Одна з речей, яка може вас вкусити - це якщо ви використовуєте .onmousedownяк взаємодію з користувачем; коли ви це зробите, а потім негайно зробите спробу вибрати поле, цього не станеться, тому що мишкою затримано щось інше . Тож перейдіть на .onmouseupі viola, тепер це focus()працює, тому що миша перебуває в стані натискання, коли робиться спроба змінити фокус.


1

Ви не надали достатньо коду, щоб допомогти Вам, швидше за все, надіслати форму та перезавантажити сторінку АБО у вас на сторінці є такий об’єкт, як вбудований PDF, який краде фокус.

Ось канонічний звичайний метод javascript для перевірки форми. Його можна вдосконалити за допомогою ненав’язливого JS, який видалить вбудований сценарій, але це початкова точка DEMO

function validate(formObj) {
  document.getElementById("errorMsg").innerHTML = "";    
  var quantity = formObj.quantity;
  if (isNaN(quantity)) {
    quantity.value="";
    quantity.focus();
    document.getElementById("errorMsg").innerHTML = "Only numeric value is allowed";
    return false;
  }
  return true; // allow submit
}   

Ось HTML

<form onsubmit="return validate(this)">
    <input type="text" name="quantity" value="" />
    <input type="submit" />
</form>    
<span id="errorMsg"></span>

1

Таким чином встановлюється фокус і курсор до кінця введення:

div.getElementsByTagName("input")[0].focus();
div.getElementsByTagName("input")[0].setSelectionRange(div.getElementsByTagName("input")[0].value.length,div.getElementsByTagName("input")[0].value.length,"forward");

0

З мого досвіду

document.getElementById (frmObj.id) .focus ();

добре підходить для браузера, що працює на ПК. Але на мобільному пристрої, якщо ви хочете, щоб клавіатура відображалася, щоб користувач міг вводити безпосередньо, вам також потрібно:

document.getElementById (frmObj.id) .select ();


0

Всередині вхідного тегу ви можете додати autoFocus = {true} для всіх, хто використовує jsx / response.

<input
 type="email"
 name="email"
 onChange={e => setEmail(e.target.value)}
 value={email}
 placeholder={"Email..."}
 autoFocus={true}
/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.