Vanilla JavaScript Dynamically Calling a Function

— 5 minute read

permalink

Have you ever had the scenario where you needed to call a function, but based on a variable?

In my most recent use case, I have an area of dynamic modules and loop over them; then, if I find one of these, I want to call the function dynamically.

So how do we go about this?

Defining our Functions permalink

First, let's start by making our functions.

function customClick(button) {
button.addEventListener('click', function(event) {
alert('custom click');
});
}

function customUppercase(input) {
input.addEventListener('keyup', function() {
input.value = input.value.toUpperCase();
});
}

Not very exciting functions but good enough to test with.

For this we are going to use the following HTML

<input type="text" data-module="customUppercase" /> <br /><br />
<button type="submit" data-module="customClick">Done</button>

JavaScript Dynamically Calling a Function permalink

Ok, let's start by defining our array of custom objects.

var options = ['Click', 'Uppercase'];

We will now loop over these:

for (var i = 0; i < options.length; i++) {
console.log(options[i]);
}

Within the modules we need to get all the types that have the data-module we are passing:

for (var i = 0; i < options.length; i++) {
var items = document.querySelectorAll('[data-module="custom' + options[i] + '"]');
for (var j = 0; j < items.length; j++) {
// Call function
}
}

Now, we need to call the function dynamically!

for (var i = 0; i < options.length; i++) {
var items = document.querySelectorAll('[data-module="custom' + options[i] + '"]');
for (var j = 0; j < items.length; j++) {
this['custom' + options[i]](items[j]);
}
}

That's it! Have a shot at this Codepen.

See the Pen Vanilla JavaScript Dynamically Calling a Function by Chris Bongers (@rebelchris) on CodePen.

Thank you for reading, and let's connect! permalink

Thank you for reading my blog. Feel free to subscribe to my email newsletter and connect on Facebook or Twitter