1 | initial version |
Here is an example of creating a JavaScript function that adds a button to the DOM and executes the same function when the button is clicked:
// Create a function that adds a button to the DOM and executes the same function when the button is clicked
function addButtonToDom() {
// Create a button element
var button = document.createElement('button');
button.innerHTML = 'Click me';
// Append the button to the body of the page
document.body.appendChild(button);
// Add an event listener to the button
button.addEventListener('click', addButtonToDom);
}
Explanation:
- The addButtonToDom()
function creates a new button element using document.createElement()
.
- The innerHTML
property of the button is set to 'Click me' using button.innerHTML
.
- The button is appended to the document.body
element using document.body.appendChild(button)
- An event listener is added to the button using button.addEventListener()
, which executes the addButtonToDom()
function when the button is clicked.
This creates a loop where every time the button is clicked, it adds a new button to the DOM and attaches the same event listener, so clicking the button will continue to create more buttons that behave the same way. To avoid this, we can remove the event listener after it has been executed once, like so:
function addButtonToDom() {
var button = document.createElement('button');
button.innerHTML = 'Click me';
document.body.appendChild(button);
// Add an event listener to the button
button.addEventListener('click', function() {
addButtonToDom();
// Remove the event listener after it has been executed
button.removeEventListener('click', arguments.callee);
});
}
Explanation:
- The button.addEventListener()
call now provides a new function as the listener, which executes addButtonToDom()
but also removes the same listener from the button using button.removeEventListener()
.
This creates a self-terminating loop where the button is only clickable once to create a new button, after which the listener is removed to prevent further execution.