Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
Acción sobre el desenfoque, excepto cuando se hace clic en un elemento específico con jQuery

Hay dos elementos en juego:

 $('#myInput') // an input field for search $('#myList') // a list to display search results

Quiero ocultar la lista cuando la entrada ya no tiene foco, así:

 $('#myInput').blur(function() { $('#myList').hide(); });

Esto funciona muy bien, excepto cuando se hace clic en un elemento de la lista, porque el evento de desenfoque se activa y oculta la lista antes de que se registre el clic. El objetivo es que la lista permanezca visible cuando se hace clic en cualquier parte de la lista, aunque esto hará que la entrada se vea borrosa.

¿Cómo puedo hacer esto? ¡Gracias!

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede lograr esto manteniendo una variable global y configurandoTimouts, para esperar un retraso de 200 ms y luego verificar si uno de los 2 elementos tiene el foco.

 var keepFocus = false; function hideList(){ if(!keepFocus){ $('#myList').hide(); } } $('#myInput').blur(function() { keepFocus = false; window.setTimeout(hideList, 200); }).focus(function(){ keepFocus = true; }); $('#myList').blur(function() { keepFocus = false; window.setTimeout(hideList, 200); }).focus(function(){ keepFocus = true; });
over 4 years ago · Santiago Trujillo Report

0

Me he enfrentado exactamente al mismo problema, así que así es como lo resolví.

Se me ocurrió el hecho de que blur() se dispara antes que click() .

Así que traté de cambiar click() a mousedown() y descubrí que mousedown() dispara antes que blur() .

Y para imitar click() tendrás que disparar mousedown() y luego mouseup()

Así que en tu caso yo haría algo como esto:

 var click_in_process = false; // global $('#myList').mousedown(function() { click_in_process = true; }); $('#myList').mouseup(function() { click_in_process = false; $('#myInput').focus(); // a code of $('#myList') clicking event }); $('#myInput').blur(function() { if(!click_in_process) { $('#myList').hide(); // a code of what you want to happen after you really left $('#myInput') } });

Demostración/ejemplo: http://jsfiddle.net/bbrh4/

¡Espero eso ayude!

over 4 years ago · Santiago Trujillo Report

0

Debe poder decir "hacer este desenfoque () a menos que la lista se enfoque al mismo tiempo".

Esta pregunta dice cómo detectar si un elemento tiene foco: Usar jQuery para probar si una entrada tiene foco

Entonces todo lo que necesitas hacer es:

 $("#myInput").blur(function () { if (!$("#myList").is(":focus")) { $("#myList").hide(); } });
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!