2011-10-31 10 views
33

Tengo un diálogo jquery ui con pestañas cargadas dinámicamente/JSON con contenido. Debido a la complejidad, realmente no puedo publicar un violín o un código relevante (demasiado código).¿Quitar el foco programmatically?

Lo que sucede es que cuando se abre el cuadro de diálogo, puede desplazarse por los elementos dentro del cuadro de diálogo, hasta la primera pestaña. Después de eso, no puedes desplazarte a ningún otro lado. El enfoque está bloqueado en esa pestaña, incluso si hace clic en otro lugar, ese enfoque está bloqueado en esa pestaña.

No puedo encontrar la causa real de este problema.

Entonces, ¿cómo eliminaría el foco mediante programación?

+0

¿Qué navegador está utilizando? En IE a veces pierdes el enfoque sin una buena razón. – Hossein

+0

¿Se ha sobrescrito el evento de pulsación de tecla para TAB para gestionar manualmente la conmutación de foco (como se podría hacer al mostrar cuadros de diálogo modales)? –

+0

el único lugar donde veo un evento de pulsación de tecla es para que una función de tecla pueda presionar la flecha hacia abajo en el contenido de la pestaña. Y está en todos los navegadores. – Jason

Respuesta

55

Esto podría ayudar ...

http://api.jquery.com/blur/

$('#tabName').blur(); 
+1

Esta es la respuesta correcta, sin embargo, no dije ni explicaba mi situación con claridad. Voy a actualizar en consecuencia. Gracias. – Jason

+3

Esto funciona bien y resolvió un problema similar que estaba teniendo. Un cambio rápido que recomendaría, si está utilizando jQuery y necesita aplicarlo genéricamente a un alcance de eventos, puede hacer algo como esto: '$ (document.activeElement) .blur()' - lo que esté activo perderá foco en el momento del evento. – Markus

+2

¿Cómo hacerlo con JavaScript puro? – AmerllicA

0

Puse en un montón de alertas para encontrar dónde está fallando el JS. P.ej.

alert(1); 
var a = 10; 
alert(2); 
var b = null; 
alert(3); 
a += 5; 
alert(4); 
b.hello(); 
alert(5); 

Obviamente, en este ejemplo la última alerta se 4.

No es un enfoque bien, pero cada uno tiene que hacerlo en algún momento.

+9

La alerta no es una forma adecuada de depurar, especialmente si reacciona a mousemove, hover o eventos similares. Casi cualquier navegador tiene una consola de depuración hoy en día con la que puede escribir usando 'console.log (...);' – ThiefMaster

+6

La forma correcta de depurar es lo que le ayuda a rastrear un error de la manera más eficiente. Las alertas tienen un papel muy útil en la depuración porque detienen la ejecución. Ayer mismo estaba depurando una animación jQuery glitchy y 'console.log()' era inútil para determinar de dónde venía este problema visual, porque sucedió tan rápido. Al agregar alertas pausó la animación en cada paso y me permitió encontrar exactamente dónde se originaba el fallo. Tiene razón en que el método OP no es el correcto, y 'console.log()' es mejor en esa instancia, pero 'alert()' tiene un lugar en la depuración. – Gavin

+1

@Gavin y descansar. Mejor entonces usar el comando 'debugger' (al menos en los navegadores que lo soportan). Pausa la ejecución, pero aún le permite usar sus herramientas de desarrollador para examinar lo que está sucediendo. Con la alerta, todo lo que obtiene es una instantánea visual del estado actual, que no siempre ayuda. – stafffan

2

Try desencadenar un evento blur en el campo que desea perder el foco.

Cuestiones relacionadas