Ich habe folgende JS-CodeEventlistener zeigt falsche Ziel
var existingMenus = document.getElementsByClassName('multiSelectMenu');
for (var i = 0; i < existingMenus.length; i++) {
var existingMenu = existingMenus[i];
var existingMenuHTML = [];
var targetChildren = existingMenu.parentElement.nextElementSibling.children;
console.log(targetChildren)
// Here I'm adding +1 to the ID as it appears starting at zero with a styled checkbox does not work correctly
for (var x = 0; x < targetChildren.length; x++) {
if (targetChildren[x].selected) {
existingMenuHTML += '<li><input class="dropdown-input" type="checkbox" id="' + (x + 1) + '" data-label="' + targetChildren[x].textContent + '" checked="true"/><label class="multiLabel" for="' + (x +
1) + '"><span></span> ' + targetChildren[x].textContent + ' </label></li>';
} else {
existingMenuHTML += '<li><input class="dropdown-input" type="checkbox" id="' + (x + 1) + '" data-label="' + targetChildren[x].textContent + '"/><label class="multiLabel" for="' + (x + 1) +
'"><span></span> ' + targetChildren[x].textContent + ' </label></li>';
}
}
existingMenu.innerHTML += existingMenuHTML;
console.log(existingMenuHTML)
var inputs = existingMenu.children;
console.log(inputs);
for (var w = 0; w < inputs.length; w++) {
var input = inputs[w].children[0];
console.log(input);
input.addEventListener('click', function() {
console.log('--------------')
console.log(event)
var targetElement = event.target || event.srcElement;
console.log(targetElement);
var elementParent = targetElement.parentElement.parentElement.parentElement;
console.log(elementParent)
if (!elementParent.classList.contains('open')) {
elementParent.className += ' open';
}
var multiList = elementParent.nextSibling.querySelector('[value="' + targetElement.dataset.label + '"]');
console.log(multiList)
// Subtracting one to account for the plus one I added above
var inputId = targetElement.id - 1;
if (targetElement.checked == true) {
multiList.selected = "selcted";
} else {
multiList.selected = "";
}
console.log('--------------')
});
}
}
Der Code funktioniert korrekt auf der ersten Instanz des Multipick aber alle anderen auf Seite Trigger die ersten multiSelectMenu Artikel, obwohl ich auf der 3. multiSelectMenu klickte Auf Seite.
ist hier ein Screenshot der Konsole
ist hier ein Code Stift, https://jsfiddle.net/6s3rc8d7/ Wenn Sie das ‚Etikett‘ klicken und nicht das Kontrollkästchen es das gleiche Problem habe ich zu sehen bin.
Sie verpassen das Ereignis "event" für die Ereignis-Listener-Funktion. Nicht alle Browser ermöglichen Ihnen den Zugriff darauf als globale Variable. – Barmar
Können Sie eine ausführbare Datei [Stack Snippet] (http://meta.stackoverflow.com/questions/270944/feedback-requested-stack-snippets-2-0) erstellen? – Barmar
Ich habe den Ereignisparameter hinzugefügt, aber leider hat es immer noch das gleiche Problem. Ich kann versuchen, einen CodePen zu erstellen, aber ich verwende eine Sprache namens VisualForce, die nur HTML rendert, so dass es nicht einfach ist, das postkompilierte Markup zu konvertieren. –