When you use an inline handler, the handler is wrapped inside two with statements: one for the element the handler is on, and one for the document. Your code is doing something like:
with (document) {
with (button) {
clear();
}
}
But clear exists on the document:
console.log(document.clear);
So, when you reference an identifier named clear, it never gets out of the withs, so the function that you called clear never runs.
Use a different variable name, like clearInputAndOutput:
function go() {
var string = document.getElementById("input").value;
var encodedString = btoa(string);
document.getElementById("output").value = "data:text/html;base64," + encodedString;
}
function copy() {
var copyText = document.getElementById("output");
copyText.select();
copyText.setSelectionRange(0, 99999)
document.execCommand("copy");
}
function clearInputAndOutput() {
document.getElementById("output").value = "";
document.getElementById("input").value = "";
}
var input = document.getElementById("input");
input.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault();
document.getElementById("go").click();
}
});
button {
font-family: 'Baloo 2', cursive;
background-color: lightgrey;
}
input {
font-family: 'Baloo 2', cursive;
}
<link href="https://fonts.googleapis.com/css?family=Baloo+2&display=swap" rel="stylesheet">
<input id="input" type="text" size="160" placeholder="HTML here" value="">
<button onclick="clearInputAndOutput()">🞪</button>
<button id="go" onclick="go()">Convert</button>
<br><br>
<input type="text" placeholder="Output here" id="output" size="160">
<button onclick="copy()">Copy text</button>
But it would be far better to attach the event handler properly using Javascript. Inline handlers have too many scoping and escaping problems, and are best avoided. Use addEventListener instead, and you won't have to worry about name collisions or global variable problems:
const [clearBtn, goBtn, copyBtn] = document.querySelectorAll('button');
clearBtn.addEventListener('click', () => {
document.getElementById("output").value = "";
document.getElementById("input").value = "";
});
goBtn.addEventListener('click', () => {
var string = document.getElementById("input").value;
var encodedString = btoa(string);
document.getElementById("output").value = "data:text/html;base64," + encodedString;
});
copyBtn.addEventListener('click', () => {
var copyText = document.getElementById("output");
copyText.select();
copyText.setSelectionRange(0, 99999)
document.execCommand("copy");
});
var input = document.getElementById("input");
input.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault();
document.getElementById("go").click();
}
});
button {
font-family: 'Baloo 2', cursive;
background-color: lightgrey;
}
input {
font-family: 'Baloo 2', cursive;
}
<link href="https://fonts.googleapis.com/css?family=Baloo+2&display=swap" rel="stylesheet">
<input id="input" type="text" size="160" placeholder="HTML here" value="">
<button>🞪</button>
<button id="go">Convert</button>
<br><br>
<input type="text" placeholder="Output here" id="output" size="160">
<button>Copy text</button>
on...html attributes, useaddEventListenerin JS context. Also, don't use<br>, we have CSS, you're using it, so add margin/padding where appropriate.