Как установить указатель мыши на том месте текста где я кликнул?

При клике по textarea курсор мыши всегда встает на последнюю позицию в тексте.
Вопрос почему так и как от этого избавиться.
Что я написал:
1) Создаю функцию конструктор которая создает поле div а внутри поле textarea
2) Div служит для того что бы можно было перетаскивать это поле по экруну
3) Вешаю событие mousedown на body и создаю поле с textarea при клике
4) Слушаю событие и определяю где был клик и если это поле textarea ставлю focus() и при этом указатель курсора всегда на последнем символе веденного текста в этом поле.
Немного кода
$('body').on(admin.touchStartEvent, e => {
    e.stopPropagation();
    e.preventDefault();
    const cls = $(e.target).attr('class');
    console.log(cls);
    $((e.target).closest('.wrapper-commite')).css('z-index', ++admin.zIndexCommit);
    admin.extactTouchPoint(e);
    const {top, left} = $('.wrapp-img').offset();
    switch (cls){
      case 'wrapper-commite':
        return false;
      case 'commit-textarea medium-editor-element':
        $(e.target).on('click', ev => {
          ev.stopPropagation();
          console.log($(ev.target).text());
          $(ev.target).focus();
        });
        // $(e.target).mouseup();
        // $(e.target).focus();                 // Здесь мне нужно как то поставить указатель мыши на тот участок текста куда я хочу, а не в конец текста
        // $(e.target).click();
        // console.log($(e.target));
        break;
      case 'commit-number':
        admin.moveElement = $(e.target).closest('.wrapper-commite');
        admin.moving = true;
        break;
      case 'wrapp-img__img':
        console.log('pf');
        addCommit.createCommit();
        admin.moving = true;
        break;
      case 'remove-commite':
        $(admin.moveElement).mouseup();
        $(e.target).closest('.wrapper-commite').remove();
        admin.moveElement = '';
        admin.moving = false;
        return false;
      case 'close-commite':
        addCommit.closeElem($(e.target).closest('.wrapper-commite'));
        return false;
      default:
        console.log(cls);
    }
    admin.commitePosX = admin.touchX - left; // получаем координаты элемента
    admin.commitePosY = admin.touchY - top;  // относительно края окна
    $(admin.moveElement).css({top: admin.commitePosY, left: admin.commitePosX});
    admin.touchStartX = admin.touchX;
    admin.touchStartY = admin.touchY;
  });

  $('body').on(admin.touchMoveEvent, e => {
    if (!admin.moving){
      return false;
    }
    admin.extactTouchPoint(e);
    let newY = admin.commitePosY + (admin.touchY - admin.touchStartY);
    let newX = admin.commitePosX + (admin.touchX - admin.touchStartX);
    admin.moveElem(admin.moveElement, newX, newY, function (){admin.moving = true;});
  });

  $('body').on(admin.touchEndEvent, e => {
    e.stopPropagation();
    e.preventDefault();
    admin.moving = false;
    admin.moveElement = '';
  });

  admin.moveElem = (elem, x, y, callback) => {
    $(elem).css({top: y, left: x});
    callback();
  };

Может я изначально что то не то делаю ?
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
@dimentimor
Если я правильно понял:

3) Вешаю событие mousedown на body и создаю поле с textarea при клике.
4) Слушаю событие и определяю где был клик и если это поле textarea ставлю focus()

Нужно создавать textarea только в том случае, если event.target НЕ textarea.
А если textarea, то ничего не делать.
А у вас получается, что если это textarea, то вы принудительно переносите фокус.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы