Rolf B: Experiment details/summary

Beitrag lesen

Hallo beatovich,

du hast mehrere Probleme.

  • HTMLDetailsElement.open ist ein bool, kein String
  • click ist das falsche Event. Korrekt ist toggle, dann kommst Du dem click-Handling des Browsers nicht in die Quere.

Folgender Eventhandler funktioniert bei mir mit Chrome prächtig:

	detail.addEventListener("toggle", function(ev) { 
			let thisEl = this;
      this.querySelector("summary").setAttribute("aria-expanded", this.open ? "true" : "false");
      if (this.open) {
			  var siblings = this.parentElement.querySelectorAll("details");
			  siblings.forEach( function(sibling) {
          sibling.open = sibling === thisEl;
  			});
      }
		});

Um thisEl zu vermeiden, könnte man ev.target verwenden, oder als Callback für forEach eine Arrow-Function verwenden. Arrow-Functions erzeugen keinen neuen this-Kontext.

Ich hatte den forEach Callback zuerst als

   if (sibling !== thisEl) sibling.open = false;

geschrieben, aber die blinde Zuweisung funktioniert genauso gut.

Rolf

--
sumpsi - posui - clusi