Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2020, 17:30
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

События при фокусе на элементе с contenteditable
Привет, есть элемент:
<div class="editor" contenteditable="true" placeholder="Начните писать..."></div>

Как при фокусе создать параграф и переместить фокус на него?
Делаю что-то вроде этого:
editor.addEventListener( 'focus',  function() {
	if( editor.innerHTML == '' ) {
		editor.innerHTML = '<p></p>';
	}
} );

Но фокусировка всё равно перед тегом p.

Последний раз редактировалось Янковиц, 15.10.2020 в 17:33.
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2020, 18:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Янковиц,
const editor = document.querySelector('.editor');
editor.addEventListener( 'focus',  function() {
	if( editor.innerHTML == '' ) {
		editor.innerHTML = '<p></p>';
        editor.querySelector('p').focus()
	}
} );
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2020, 09:22
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Спасибо, я наверно не так выразился. Скорее нужно не фокус, а курсор перенести.
Ответить с цитированием
  #4 (permalink)  
Старый 16.10.2020, 09:34
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Сообщение от Янковиц Посмотреть сообщение
Спасибо, я наверно не так выразился. Скорее нужно не фокус, а курсор перенести.
Не получается навести курсор на элемент с нулевой высотой. Когда пустой p прижат к левому краю, курсор тоже не виден из-за обводки фокуса
Попробуйте так
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" lang="ru">
  <meta name="viewport" content="width=device-width, initial-scale=1.0" >
  <title>TEST</title>
 <style>
 .editor {
	width: 300px;
	min-height: 100px;
	border: 1px solid blue;	
}
 </style>
 </head>

<body >
<div class="editor" contenteditable="true" placeholder="Начните писать..."></div>

<script>
let editor = document.querySelector('.editor')
editor.addEventListener( 'focus',  function() {
    if( editor.children.length == 0 ) {
        editor.innerHTML = '<p style="min-height:10px;margin-left:3px;"></p>';
        editor.querySelector('p').focus()
    }
} );
</script>
</body>
</html>

Последний раз редактировалось voraa, 16.10.2020 в 09:38.
Ответить с цитированием
  #5 (permalink)  
Старый 16.10.2020, 09:57
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Спасибо, действительно. Неожиданное поведение.
Ответить с цитированием
  #6 (permalink)  
Старый 16.10.2020, 10:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Янковиц,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  div[contenteditable] > p{
      border: 1px solid red;
      min-height: 1em;
      background-color: #FFFFFF;
      margin: 4px 2px;
  }
  div[contenteditable]:focus  {
      outline: none;
  }
  div[contenteditable]{
      background-color: #CCCCFF;
      padding: 1px 4px;
  }
  div[contenteditable]:empty:before {
  content:attr(placeholder);
  color:gray
}
  </style>
</head>

<body>
<div class="editor" contenteditable="true" placeholder="Кликните и начните писать..."></div>
<script>
const editor = document.querySelector('.editor');
editor.addEventListener( 'focus',  function() {
	if( editor.innerHTML == '' ) {
		editor.innerHTML = '<p></p>';
        editor.querySelector('p').focus()
	}
} );

</script>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 16.10.2020, 10:09
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Сообщение от Янковиц Посмотреть сообщение
Спасибо, действительно. Неожиданное поведение.
Там еще более неожиданное поведение.
Попробуйте нажимать enter при вводе.
Каждая строка будет оформляться в виде отдельного параграфа внутри div. Не <br> ставит внутри <p>, а новый <p> создает.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить класс при фокусе TestUser013 Angular.js 4 06.01.2017 12:59
Переносы строк в div contenteditable при выделении текста NapalmRain Элементы интерфейса 13 19.08.2016 13:14
Погоите разобраться с реагированием на события мышки filmokrut Общие вопросы Javascript 3 06.08.2016 20:07
вызов события на определенном элементе vvsh Events/DOM/Window 1 23.06.2010 06:17
Добавление класса на елемент по id при фокусе на input Andrew_tl Events/DOM/Window 1 18.02.2010 19:09