Нажатие клавиши триггера в div с возможностью выбора содержимого с помощью setTimeout

#javascript #html #jquery #contenteditable

Вопрос:

Я застрял на моделировании keypress / keydown на div содержимом . Код должен имитировать нажатие клавиши enter (или любой другой клавиши, если на то пошло, но в данном случае сосредоточен на клавише enter), что я делаю не так?

 let el = $('#el'), btn = $('button');  btn.on('click', function() {  el.text('text changed')  setTimeout(function() {  el.focus();   let keyP = jQuery.Event("keypress");  keyP.which = 13;   el.trigger(keyP);    },1000);  }); 
 lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;div id="el" contenteditable="true"gt;Add textlt;/divgt;  lt;buttongt;replace textlt;/buttongt; 

Комментарии:

1. Я не думаю, что вы делаете что-то не так в коде, но я не думаю, что запуск события JS обновит базовые элементы управления браузером, которые обрабатывают редактирование контента. Рассматривали ли вы возможность отслеживания положения курсора и вставки новой строки путем замены содержимого редактируемых элементов?

2. @DBS Да, заменить содержимое довольно просто, но в данном случае это должна быть имитация нажатия клавиши 🙁

3. Почему вам нужно делать это именно так? Возможно, если вы дадите больше контекста, люди смогут предложить жизнеспособные альтернативы или придумать обходные пути.

4. @DBS Это единственный способ регистрации фактического события в определенной CMS, поэтому контент обновляется, для чего его замена просто не сработает. Я знаю, что это довольно странная просьба, но, похоже, это единственный выход.

5. @DBS, так что я имею в виду, что в каком-то событии я обновляю содержимое из этого div, но оно будет зарегистрировано только в том случае, если на этом конкретном элементе будет фактическое нажатие клавиши, которое я пытаюсь имитировать.