fix(quellen): Submit-Listener direkt binden, nicht via DOMContentLoaded
Folge-Fix zu 501f32b: das body_scripts-Skript läuft am Ende des Body,
da ist DOMContentLoaded oft schon vorbei. Der bisherige Wrapper
``document.addEventListener('DOMContentLoaded', ...)`` wurde dann nie
gefeuert, der Submit-Listener nie gebunden — Suchknopf weiter still.
Lösung: IIFE direkt aufrufen + Idempotenz-Marker (``_quellenBound``)
gegen Doppelbindung.
This commit is contained in:
parent
501f32b9ae
commit
87725ee3d9
@ -380,27 +380,33 @@ async function runSearch(ev) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Form-Submit + Filter-Wechsel binden
|
// Form-Submit + Filter-Wechsel binden.
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
// Direkt im body_scripts-Block — wenn das Script läuft, ist DOMContentLoaded
|
||||||
// Wichtig: `runSearch` ist async, returnt Promise<false>. Das ist truthy,
|
// häufig schon vorbei (Script kommt am Ende des Body). Daher kein
|
||||||
// also würde `onsubmit="return runSearch(event)"` das Default-Submit
|
// addEventListener('DOMContentLoaded', …) als Wrapper.
|
||||||
// NICHT verhindern und der fetch würde mit "Failed to fetch" abbrechen,
|
//
|
||||||
// weil die Page navigiert. Stattdessen via addEventListener binden — da
|
// Wichtig: `runSearch` ist async und returnt Promise<false>. Das ist truthy,
|
||||||
// ist `event.preventDefault()` synchron geblieben, bevor der Promise
|
// also würde `onsubmit="return runSearch(event)"` das Default-Submit NICHT
|
||||||
// resolvt.
|
// verhindern, der fetch würde mit "Failed to fetch" abbrechen, weil die Page
|
||||||
|
// navigiert. Stattdessen über addEventListener binden — da bleibt
|
||||||
|
// `event.preventDefault()` synchron, bevor der Promise resolvt.
|
||||||
|
(function bindQuellenSearch() {
|
||||||
const form = document.getElementById('quellen-search-form');
|
const form = document.getElementById('quellen-search-form');
|
||||||
if (form) {
|
if (form && !form._quellenBound) {
|
||||||
|
form._quellenBound = true;
|
||||||
form.addEventListener('submit', (ev) => {
|
form.addEventListener('submit', (ev) => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
runSearch();
|
runSearch();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
document.querySelectorAll('input[name="qfilter"]').forEach(r => {
|
document.querySelectorAll('input[name="qfilter"]').forEach(r => {
|
||||||
|
if (r._quellenBound) return;
|
||||||
|
r._quellenBound = true;
|
||||||
r.addEventListener('change', () => {
|
r.addEventListener('change', () => {
|
||||||
const q = (document.getElementById('quellen-q') || {}).value || '';
|
const q = (document.getElementById('quellen-q') || {}).value || '';
|
||||||
if (q.trim().length >= 2) runSearch();
|
if (q.trim().length >= 2) runSearch();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
})();
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user