<div class="uk-accordion" data-uk-accordion> <div class="uk-accordion-title"> <h3><a href="#">Title</a></h3> <div>something else</div> </div> <div class="uk-accordion-content">...</div> </div> De forma predeterminada, una vez que se inicia el componente de acordeón, se podrá hacer clic en todo el elemento de .uk-accordion-title y al hacer clic en él se expande el contenido, incluso si los usuarios están haciendo clic en el enlace que contiene. ¿Cómo puedo hacer que se pueda hacer clic en los enlaces y solo hacer clic en otro lugar expande el contenido?
Actualmente, el componente Accordion de UIKit necesita que los elementos "uk-accordion-title" y "uk-accordion-content" se agrupen dentro de un 'padre', que falta en su código. UIKit necesita este padre para agregarle dinámicamente una clase uk-open , para hacer que el acordeón esté 'abierto'. Entonces, su estructura de código original debería ser algo como esto:
<div uk-accordion> <div> <div class="uk-accordion-title"> <h3><a href="https://example.com">Accordion Title</a></h3> <div>some accordion sub-title here</div> </div> <div class="uk-accordion-content"> Accordion content that is displayed when open. </div> </div> </div> La razón por la que su elemento <a> no funciona como se esperaba es porque, de manera predeterminada, cuando hace clic en un elemento <a> , el evento de clic podrá 'propagarse'. Cuando el clic ocurre dentro de un título de acordeón de UIKit, UIKit 'atrapará' ese evento de clic y anulará su comportamiento predeterminado, usándolo para 'abrir' el acordeón.
Entonces, para evitar que UIKit anule el comportamiento de clic predeterminado <a> , lo que debe hacer es obtener el elemento <a> para evitar que el evento de clic se propague a UIKit, así:
<a href="https://example.com" onclick="event.stopPropagation();"> Ahora UIKit no verá el 'clic' y no lo anulará, y el elemento <a> podrá realizar su función habitual cuando se haga clic en él.
Al hacer clic en otro lugar del título del acordeón, se generará un evento de "clic", que UIKit detectará y abrirá el acordeón, como se esperaba.