Problem beim Setzen der Bootstrap-Schaltflächen auf den aktiven Status
Posted: 13 Jan 2025, 17:39
Ich versuche auf meiner Website Folgendes zu erreichen: Wenn auf eine Schaltfläche geklickt wird, wird sie aktiv, ihr Wert wird an ein Eingabefeld gesendet, und wenn der Wert im Eingabefeld manuell geändert wird, wird der aktive Status der Schaltfläche angezeigt sollte entfernt werden.
Hier ist ein Beispiel für die Schaltflächen:
Ich habe zwei Funktionsvarianten, aber keine funktioniert vollständig und ich kann sie nicht kombinieren.
Bei der ersten Variante liegt das Problem dass der aktive Zustand der Schaltflächen nicht entfernt wird, wenn das Eingabefeld manuell bearbeitet wird.
Bei der zweiten Variante besteht das Problem darin, dass Schaltflächen nicht wiederholt umgeschaltet werden können. Es funktioniert nur einmal. Nach dem zweiten Klick (auf eine andere Schaltfläche) wird diese zweite Schaltfläche nicht aktiv.
Hier ist ein Beispiel für die Schaltflächen:
Code: Select all
ABC
DEF
GHI
Bei der ersten Variante liegt das Problem dass der aktive Zustand der Schaltflächen nicht entfernt wird, wenn das Eingabefeld manuell bearbeitet wird.
Code: Select all
function filterTable(button) {
const buttons = document.querySelectorAll('button');
buttons.forEach(btn => btn.classList.remove('active'));
button.classList.add('active');
const data = button.getAttribute('data');
const searchInput = document.querySelector('.form-control.form-control-sm[type="search"]');
searchInput.value = data;
searchInput.dispatchEvent(new Event('input'));
}
Code: Select all
function filterTable(button) {
const buttons = document.querySelectorAll('button');
buttons.forEach(btn => btn.classList.remove('active'));
button.classList.add('active');
const data = button.getAttribute('data');
const searchInput = document.querySelector('.form-control.form-control-sm[type="search"]');
searchInput.value = data;
searchInput.dispatchEvent(new Event('input'));
searchInput.addEventListener('input', () => {
buttons.forEach(btn => btn.classList.remove('active'));
}, { once: true });
}