I have a <div contenteditable="true"> and a <textarea> on my page. I need to get the text that is typed in the textarea to be displayed in the div, while keeping the text that was already in the div. I already kind of achieved that with a keyup function on the textarea but it is not working properly. I believe the problem must be having the contenteditable text variable updated with each keyup. I tried changing the scope of value1, making it a global variable instead, but it still does not work. Any help?
This is my code:
$(".secondary").keyup(function () {
var value1 = $(".original").html();
var value2 = $(".secondary").val();
$(".original").html(value1 + value2);
});div {
width: 300px;
height: 100px;
border: solid 1px #000;
overflow-y: scroll;
}
textarea {
width: 300px;
height: 100px;
border: solid 1px #000;
resize: none;
overflow-y: scroll;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p>Content Editable:</p> <div class="original" contenteditable></div> <br><br> <p>Text Area:</p> <textarea class="secondary"></textarea>
So, if you type “Foo” in the contenteditable and “bar” in the textarea, the text in the contenteditable should be “foobar”.
Also, if the last character in the contenteditable is a space, typing in the textarea will add a <br> to the contenteditable. Is there a way to fix that?
Advertisement
Answer
Instead of using keyup, I’d prefer to use input event handler. Try out the snippet :
$(".secondary").on('input', function(event) {
var val = $('.original').text();
$('.original').text(val + event.originalEvent.data);
});div {
width: 300px;
height: 100px;
border: solid 1px #000;
overflow-y: scroll;
}
textarea {
width: 300px;
height: 100px;
border: solid 1px #000;
resize: none;
overflow-y: scroll;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <p>Content Editable:</p> <div class="original" contenteditable></div> <br><br> <p>Text Area:</p> <textarea class="secondary"></textarea>