'Rendering the Text input message at button click
I am a complete beginner and asking question here for the first time.
I am trying to render a text that user puts in the textfield, and want it to show below my title. Below is my code, what's the problem with this?
<div class="container">
<h1>I want to pass this message to all:</h1>
<input type="text" id="msg-text" size="100%">
<button id="msg-button">Click to Save</button>
<h2 class="save-title">Save the Message Below:</h2>
<p id="save-msg"></p>
</div>
<script type="text/javascript" href="script.js"></script>
My Javascript:
let myMessage = []
const msgTextEl = document.getElementById("msg-text")
const msgButtonEl = document.getElementById("msg-button")
const saveMsgEl = document.getElementById("save-msg")
msgButtonEl.addEventListener("click", function(){
myMessage.push(msgTextEl.value)
msgTextEl.value = ""
})
let messageList = ""
for (let i = 0; i < msgTextEl.length; i++){
messageList += "<li>" + myMessage[i] + "</li>"
}
saveMsgEl.innerHTML = messageList
Please Help !!
Solution 1:[1]
You need to move your message history code inside click event function. also you forgot to use correct array
just change your function to
let myMessage = []
const msgTextEl = document.getElementById("msg-text")
const msgButtonEl = document.getElementById("msg-button")
const saveMsgEl = document.getElementById("save-msg")
msgButtonEl.addEventListener("click", function(){
myMessage.push(msgTextEl.value)
msgTextEl.value = ""
//using myMessage array instead of msgTextEl
let messageList = ""
for (let i = 0; i < myMessage.length; i++){
messageList += "<li>" + myMessage[i] + "</li>"
}
saveMsgEl.innerHTML = messageList
})
Running example
let myMessage = []
const msgTextEl = document.getElementById("msg-text")
const msgButtonEl = document.getElementById("msg-button")
const saveMsgEl = document.getElementById("save-msg")
msgButtonEl.addEventListener("click", function(){
myMessage.push(msgTextEl.value)
msgTextEl.value = ""
//using myMessage array instead of msgTextEl
let messageList = ""
for (let i = 0; i < myMessage.length; i++){
messageList += "<li>" + myMessage[i] + "</li>"
}
saveMsgEl.innerHTML = messageList
})
<div class="container">
<h1>I want to pass this message to all:</h1>
<input type="text" id="msg-text" size="100%">
<button id="msg-button">Click to Save</button>
<h2 class="save-title">Save the Message Below:</h2>
<p id="save-msg"></p>
</div>
<script type="text/javascript" src="script.js"></script>
Solution 2:[2]
You can make it easier :
const msgTextEl = document.getElementById("msg-text")
const msgButtonEl = document.getElementById("msg-button")
const saveMsgEl = document.getElementById("save-msg")
// EVENT ON CLICK
msgButtonEl.addEventListener("click", function(){
// CREATE A NODE AND APPEND TO SAVE-MSG
let tmpMsg = document.createElement('li')
tmpMsg.textContent = msgTextEl.value;
saveMsgEl.appendChild(tmpMsg)
})
<div class="container">
<h1>I want to pass this message to all:</h1>
<input type="text" id="msg-text" size="100%">
<button id="msg-button">Click to Save</button>
<h2 class="save-title">Save the Message Below:</h2>
<p id="save-msg"></p>
</div>
Solution 3:[3]
You can try this approach.
let btn = document.getElementById('msg-button');
let container = document.getElementById('save-msg');
btn.addEventListener('click', function() {
let inputData = document.getElementById('msg-text').value;
let newElement = document.createElement('p');
newElement.innerHTML = inputData;
container.appendChild(newElement);
container.insertAdjacentHTML('beforeend', '<br />');
});
<div id="container">
<h1>I want to pass this message to all:</h1>
<input type="text" id="msg-text" size="100%">
<button id="msg-button">Click to Save</button>
<h2 class="save-title">Save the Message Below:</h2>
<p id="save-msg"></p
</div>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Floz42 |
| Solution 3 | Crystal |
