1./
Ich fixiere den Code: Länge -> Länge und Klammer Spiel
2./
Die this
innerhalb des Klick Zuhörer ein Knotenelement ist aus diesem Grund Sie sollten für die Klassennamen (this.className
)
'use strict'
var popup1Initer = document.querySelectorAll('.popup-1-initer'),
popup2Initer = document.querySelectorAll('.popup-2-initer'),
popup3Initer = document.querySelectorAll('.popup-3-initer');
open (popup1Initer, popup2Initer, popup3Initer);
function open() {
for (var i = 0; i < arguments.length; i++) {
for (var n = 0; n < arguments[i].length; n++) {
arguments[i][n].addEventListener('click', function() {
switch (this.className) {
case 'popup-1-initer':
show(overlay, popup1);
break;
case 'popup-2-initer':
show(overlay, popup2);
break;
case 'popup-3-initer':
show(overlay, popup3);
break;
default:
console.log('no popups');
break;
}
})
}
}
}
//added for testing
var overlay = 'overlay',
popup1 = 'popup1',
popup2 = 'popup2',
popup3 = 'popup3';
function show(p1,p2){
console.log(p1,p2)
}
fragen
aber Sie können den Code vereinfachen.
'use strict'
var popupIniter = document.querySelectorAll('.popup-1-initer, .popup-2-initer, .popup-3-initer');
open (popupIniter);
function open (list) {
for (var i = 0; i < list.length; i++) {
list[i].addEventListener('click', function() {
switch (this.className) {
case 'popup-1-initer':
show(overlay, popup1);
break;
case 'popup-2-initer':
show(overlay, popup2);
break;
case 'popup-3-initer':
show(overlay, popup3);
break;
default:
console.log('no popups');
break;
}
})
}
}
//added for testing
var overlay = 'overlay',
popup1 = 'popup1',
popup2 = 'popup2',
popup3 = 'popup3';
function show(p1,p2){
console.log(p1,p2)
}
https://jsfiddle.net/3v00afhc/
Neben schlage ich Daten-Attribut zu verwenden, aber ich nehme an, Sie nicht den Code html ändern
somethong wie:
'use strict'
var popupIniter = document.querySelectorAll('[data-popup-initer]')
function selectPopUp(elem) {
var popup = parseInt(this.getAttribute('data-popup-initer'));
switch (popup) {
case 1:
show(overlay, popup1);
break;
case 2:
show(overlay, popup2);
break;
case 3:
show(overlay, popup3);
break;
default:
console.log('no popups');
break;
}
}
function addPopListeners(popupIniter) {
for (var i = 0; i < popupIniter.length; i++) {
popupIniter[i].addEventListener('click', selectPopUp)
}
}
addPopListeners(popupIniter);
//added for testing
var overlay = 'overlay',
popup1 = 'popup1',
popup2 = 'popup2',
popup3 = 'popup3';
function show(p1, p2) {
console.log(p1, p2)
}
https://jsfiddle.net/78qywopm/
'argument [i]' und 'length' – epascarello
@epascarello meinte ich t Hat 'Argument [i]' ist ein Array (aktueller Popup-Initiator) mit einer Sammlung von Klassen. – Vince
Erstens buchstabiert Länge falsch, zweitens sollte es Argument ** s ** sein, es sei denn, Sie haben ein Array-Argument woanders ... – epascarello