JavaScript - Problema evento click

 
Vista:

Problema evento click

Publicado por Victor (1 intervención) el 03/12/2022 23:33:06
Tengo un input en el que al dar click, o focusearlo, me muestra resultados de busqueda, y quiero que al dar click en otro elemento de la pantalla que no sea ni el mismo input ni el div que contiene los resultados, el div con los resultados se cierre.
Al darle click, se le añade la clase "show-results" al div que contiene los resultados.
El problema que tengo es, que al usar esto que vi en otra web:

$("*:not(#searchinput, .search-results)").click(function(){
if ($(".search-results").hasClass("show-results")){
$(".search-results").removeClass("show-results");
}
});

El :not no esta cumpliendo su funcion, ya que al darle click al input o sus resultados, se cierra.
Tambien he probado poniendo "main" en lugar de "*" para probar, y como el input y los resultados estan dentro de "main", pasa igual. Solo se me ocurre sacar la seccion de busqueda del main y colocarla en su sitio ajustando la posicion.
Si alguien puede ayudar, que me pregunte lo que necesite del codigo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Problema evento click

Publicado por Marlon (90 intervenciones) el 05/12/2022 02:19:07
Hola. hice este ejemplo que talvez te pueda ayudar o dar una idea de como llegar a ello.
No utilizo Jquery solo Javascript puro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<input type="text" id="searchinput">
<div id="show-results" style="display: none;">
    Resultados
</div>
 
const searchInput = document.getElementById('searchinput')
const divResults = document.getElementById("show-results");
 
function showDivResults(){
    divResults.style.display = "block";
}
 
searchInput.addEventListener('click', showDivResults)
 
window.onclick = function(event) {
    const elemt = event.target;
    if (elemt.id != "searchinput" && elemt.id != "show-results"){
        divResults.style.display = "none"
    }
}

Puedes probarlo, creo que cumple exactamente con lo que necesitas.
si no entiendes algo puedes preguntarme.
Espero te sirva, Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar