0

I have multiple elements using the same event listener. Instead of repeating the same function three times, wow do I combine them to call the same event to each of the three elements? cardNumber, cardExpiry, and cardCvc

cardNumber.addEventListener('change', function(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
});
cardExpiry.addEventListener('change', function(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
});
cardCvc.addEventListener('change', function(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
});
1
  • Don't use an Anonymous function. Commented Jun 12, 2020 at 1:00

3 Answers 3

1

Check this

cardCvc.addEventListener('change', foo);

function foo(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
}

Sign up to request clarification or add additional context in comments.

Comments

0

Simply Separate the event handler function, and make an array of the element, then finally loop it to attach the event handler.

const eventHandler = function(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
}

const items = [cardNumber, cardExpiry, cardCvc];
items.forEach((item) => {
    item.addEventListener('change, eventHandler);
});

Comments

0

You could implement Event delegation pattern

Basically it consists of assigning the event to the container of the elements, then verifying the name or type of the element you discard those that are not relevant to you and in logical consequence only those that are of interest to you would be affected. To know more visit this publication please

Here an example

const container = document.querySelector("#container");
const displayError = document.getElementById("card-errors");

container.addEventListener("change", (event) => {
  const target = event.target;

  if (target.nodeName !== "INPUT") return;

  displayError.textContent = event.error ? event.error.message : "";
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.