allFormElements[0].addEventListener('click', displayInfo(0));
Jako drugi parametr powinieneś przekazać referencję do funkcji, która zostanie dopiero wywołana z przekazaniem jej jako parametr obiekt zdarzenia.
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
target.addEventListener(type, listener[, options]);
listener
The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs. This must be an object implementing the EventListenerinterface, or a JavaScript function.
Jeśli chcesz przekazać własne parametry, to przekaż funkcję anonimową, w której dopiero wywołasz swoją funkcję:
element.addEventListener( 'click', function() {
myFunction( parameter );
} );
Sposób, w który przekazałeś drugi parametr zadziałałby, gdyby wywołana funkcja zwracała jakąś funkcję - wtedy ona została by wywołana jako callback i do niej trafiłby obiekt zdarzenia, przykład:
function getEventHandler( dummyArg ) {
return function( event ) {
/** ta funkcja zostanie wywołana przez EventListener */
}
}
element.addEventListener( 'click', getEventHandler( 'dummyParameter' ) );
Funkcje w JavaScript to obiekty, których kod możesz wywołać (nazywają się konkretnie First Class Function) - do tego służą dwa okrągłe nawiasy na końcu, często z przekazaniem tam parametrów. Jako, że są to obiekty, możesz je po prostu przekazać jako parametr - co spowoduje że będą one mogły zostać wywołane ze środka jako callback. Jeśli przekazujesz funkcję, którą od razy wywołujesz, to de facto przekazujesz wynik wykonania danej funkcji.
Całość natomiast, żeby się nie powtarzać 8 razy - umieść w pętli albo zastosuj event delegation - podłączasz EventListener na wspólnym rodzicu wszystkim pól formularza i tam za pośrednictwem event.target wykrywasz, w które pole kliknąłeś i co ma się dziać.