Skip to main content

Command Palette

Search for a command to run...

Vanilla JavaScript Dynamically Calling a Function

Published
2 min read
Vanilla JavaScript Dynamically Calling a Function
C

I'm a full-stack developer from South Africa 🇿🇦. I love writing about JavaScript, HTML and CSS.

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

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

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.

Thank you for reading, and let's connect!

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

More from this blog

D

Daily Dev Tips

887 posts

Looking to get into development? As a full-stack developer I guide you on this journey and give you bite sized tips every single day 👊