JQuery .focus фактически не фокусирует вновь созданный элемент

Допустим, у меня есть такая разметка:

<div id = "content">
  <div id = "firstP"><p>First paragraph</p></div>
  <div id = "secondP"><p>Second paragraph</p></div>
  <div id = "thirdP"><p>Third paragraph</p></div>
  <div id = "fourthP"><p>Fourth paragraph</p></div>
</div>

Я хочу добавить новый <div> с jQuery и сосредоточиться на этом новом элементе. .focus ничего не делает.

function addParagraph() {
  var html = "<div id=\"newP\"><p>New paragraph</p></div>";

  $("#content").append(html);
  $("#newP").focus();    
}

Есть идеи, почему?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
13
0
36 612
8

Ответы 8

С вашим кодом проблем нет, просто абзац или тег div не могут получить фокус. Фокус можно уделять только вещам, с которыми вы можете взаимодействовать, например ссылкам, элементам ввода, текстовым областям и т. д.

Чтобы прокрутить окно к этому недавно добавленному элементу, вы можете использовать плагин, такой как ScrollTo.

Кстати, ваш код можно немного упростить:

var html = "<div id=\"newP\"><p>New paragraph</p></div>";
$("#content").append(html);
$("#newP p").focus();

var html = "<div id=\"newP\"><p>New paragraph</p></div>";
$(html)
    .appendTo('#content')
    .focus()   // or scrollTo(), now...
;

Не нужно добавлять к $ ('# content'), просто appendTo ('# content')

Vincent Robert 10.12.2008 02:11

спасибо, отредактировано - хотя я полагаю, что за кулисами он делает то же самое ...

nickf 10.12.2008 03:41

Я думаю, что вы ищете плагин ScrollTo в jQuery. Вы можете посмотри здесь.

Вы можете указать, что прокручивать ...

$('div.pane').scrollTo(...);//all divs w/class pane

Или просто прокрутите окно:

$.scrollTo(...);//the plugin will take care of this

Есть много разных способов указать целевую позицию. Это:

  • Необработанное число
  • Строка ('44 ',' 100px ',' + = 30px ', так далее )
  • Элемент DOM (логически дочерний элемент прокручиваемый элемент)
  • Селектор, который будет относиться к прокручиваемый элемент
  • Хеш {top: x, left: y}, x и y может быть любым числом / строкой как указано выше.

Бонус: Раскапывая эту информацию, я также обнаружил LocalScroll и SerialScroll (анимирует прокрутку от одного элемента к другому).

Вам нужно использовать привязку HTML-страницы, а не фокус. Пример:

http://localhost/mypage.html#fourthP

Только элементы формы и тому подобное могут достичь фокуса. Если вы хотите, чтобы браузер прокручивал вниз до этого конкретного абзаца, для jQuery не существует "стандартного" способа сделать это с помощью jQuery, но для этого есть плагин на jQuery.ScrollTo и блог, объясняющий, как это сделать вручную, на Анимированная прокрутка с jQuery

Вместо

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

его следует использовать:

window.location.href=window.location.href + "#newP";     

может потребоваться свойство tabindex.

iamgopal 13.10.2012 09:10

Я считаю, что основной ответ неверен. Теги DIV и P могут получить фокус, если вы укажете для них свойство tabindex. т.е.

<div class = "someclass" tabindex = "100">

После указания tabindex вы можете либо перейти к этим элементам, либо сместить фокус с помощью .focus ().

Использование плагина scrollTo здесь кажется излишним.

Это помогло мне понять, как обрабатывать некоторые клавиатурные команды в div-контейнере дерева. Назначив обработчик события нажатия клавиши элементу div со значением tabIndex, я смог добавить команды клавиатуры в редактор иерархических данных.

3Dave 04.09.2009 19:32

Идеальный! Ваше - лучшее решение с точки зрения простоты. Я люблю простые вещи. Я предпочитаю избегать сценария, если это можно сделать без него.

Marcos Buarque 21.10.2009 21:41

Это было отличное решение. Большое Вам спасибо.

Corv1nus 04.08.2011 00:26

Вы должны использовать tabindex = "0", если не хотите нарушать порядок вкладок на странице. Если вы хотите сфокусироваться только с помощью Javascript и сделать div не фокусируемым, поместите tabindex = "- 1". Tabindex -1 может получить фокус с помощью Javascript, но не нажатием клавиши табуляции.

dturcotte 01.06.2012 19:04

Этот код позволит избежать зависимости от других плагинов и позволит вам иметь его на любом элементе.

$('html, body').animate({ scrollTop: $("#newP").offset().top }, 500);

Хорошая идея. Я использовал это, а не новый плагин, и просто установил тайм-аут на 0. Интересно, следует ли мне обернуть это в функцию и называть ее ScrollTo ...

Ian Grainger 17.08.2010 20:55

Да, вы могли бы сделать это и просто иметь переменную для #newP, чтобы вы могли сфокусировать любой элемент на событии.

User123342234 19.08.2010 02:36

Намного лучше, чем использовать другой плагин! БОЛЬШОЙ!

rlc 27.11.2010 20:49

Вы можете назначить tabidex, а затем установить фокус на этот элемент

$('#table').attr("tabindex",1).focus();

Это будет работать для Div Table и т. д., Которые не могут получить фокус самостоятельно.

Другие вопросы по теме