2009-06-11 14 views

Respuesta

5

No creo que haya una manera fácil de hacer lo que quiere hacer porque es el comportamiento predeterminado del navegador.

Por supuesto, puede desenfocar() el botón tan pronto como se presiona, pero eso simplemente lo deselecciona. Para que el objeto previamente activo recupere el foco, tendría que crear una "memoria" de géneros añadiendo un controlador de desenfoque para cada elemento para hacer un seguimiento de qué elemento tenía/perdió el foco al último (almacenar el id del elemento en un y actualizarlo cuando un elemento pierde el foco).

+0

+1 exactamente a la derecha. – annakata

+0

Thabks Alan - eso es más o menos lo que estoy haciendo en este momento ... hortera, pero (sobre todo, necesito hacerlo en las excepciones) funciona. –

+3

Atención, esto ya no es verdad. Vea la respuesta de @real4x a continuación. – eremzeit

0

Debido a que los botones de la barra de herramientas son simplemente elementos del botón HTML normales, este es un comportamiento real del navegador, y debe pensar dos veces antes de cambiarlo. Pero sin embargo ...

Debería poder evitar que el botón reciba el foco simplemente devolviendo false desde su controlador onclick.

+0

Gracias Rene Pensé que era el enfoque correcto, pero no pareció funcionar cuando lo probé. ATM He implementado una solución desagradable en la que en cada Formulario I establecí valores predeterminados: {onBlur: fieldExit} donde fieldExit coloca el objeto que llama en una variable lastField, luego al final del controlador de botones (todos usan el mismo) Hago lastField.focus(). Esto funciona para campos de texto, pero extrañamente no para casillas de verificación (todavía no he probado otros). –

+0

puede evitar que el botón * mantenga * el foco, pero no puede devolver el enfoque al elemento anterior sin hacer un seguimiento de tal – annakata

+0

Cuando se activa el clic, es demasiado tarde para cancelar el enfoque. Como mencioné anteriormente, la prevención del comportamiento predeterminado debe realizarse en onmousedown. No impedirá "onclick", pero evitará el cambio de foco. Al menos en los navegadores Webkit. – real4x

0

Quizás debería intentar usar stateful y cambiar las propiedades de estado para campos de formulario o lo que sea para volver a enfocar?

6

document.activeElement almacena el elemento actualmente enfocado.

Así que en su barra de herramientas, se puede añadir un "mousedown" manejador a esta función:

function preventFocus() { 
    var ae = document.activeElement; 
    setTimeout(function() { ae.focus() }, 1); 
} 

probar este ejemplo:

<html> 
<head> 
<script> 
function preventFocus() { 
    var ae = document.activeElement; 
    setTimeout(function() { ae.focus() }, 1); 
} 
</script> 
</head> 
<body> 
<input type="text"/> 
<input type="button" onmousedown="preventFocus()" onclick="alert('clicked')" value="Toolbar" /> 
</body> 
</html> 
+1

No creo que esto funcione, para cuando lo pueda ejecutar, el botón es el elemento activo. – annakata

+0

Funcionará. La variable ae se almacena dentro del cierre y no cambiará. – Alsciende

+0

Probado en Firefox, Chrome, Opera, IE7: funciona. Falla en Safari – Alsciende

0

me habría conecte un desenfoque de detector de eventos para todos los campos. Este oyente debe guardar el campo, que perdió el foco, en una variable global.

Luego, todos los botones de la barra de herramientas deberían tener un detector de eventos de enfoque. Este oyente debe enfocar el campo, que se guardó como se describió anteriormente.

Este código debería funcionar, aunque no prueba que

18

cancelación del comportamiento predeterminado de onmousedown impide que un elemento de conseguir el foco:

// Prevent capturing focus by the button. 
$('button').on('mousedown', 
    /** @param {!jQuery.Event} event */ 
    function(event) { 
     event.preventDefault(); 
    } 
); 
0
<script> 
    function focusor(){ 
     document.getElementById('focus').focus; 
    } 
    document.onkeydown = focusor; 
    document.onclick = focusor; 
</script> 
<div style="width: 0px; height: 0px; overflow: hiddden;"> 
    <button id="focus"></button> 
</div> 

Lo que he encontrado, es Tendrás que hacer un elemento ficticio, encontré botones para que funcionen mejor en esta situación. pon el botón en un div y haz el div 0px.

[no hacen la pantalla div ninguno, algunos navegadores simplemente ignorarlo]

Básicamente cualquier clic o presionar un botón, que se centrará en este botón maniquí. Tenía un proyecto muy similar y cada vez que presionaron la tecla hacia abajo seleccionó el primer botón en la página, esto solo se enfoca en el botón una y otra vez.

tipo de jacked up, pero funciona.

Cuestiones relacionadas