2011-09-07 18 views
11

Tengo un formulario HTML con varias entradas de texto. Quiero borrar el elemento que tenía el foco inmediatamente anterior a cuando se presiona el botón 'Borrar'. ¿Cómo obtengo ese elemento en JavaScript?¿Cómo obtengo el elemento previamente enfocado en JavaScript?

Nota: Se reformuló para tener en cuenta los comentarios.

+1

El elemento enfocado actual cuando se presiona el botón "Borrar" será el botón "Borrar". OK, entonces estoy siendo un poco tonto y obviamente quieres saber qué campo simplemente perdió el enfoque, pero ¿qué pasa si el usuario navega hacia "Borrar" usando la tecla de tabulación? – nnnnnn

+1

debe editar el mosaico de esta pregunta, porque ninguna de las respuestas realmente responde "Cómo obtener el elemento actual enfocado en javascript" y vine aquí buscando esa ... –

+0

@BaptistePernet: revise la respuesta de blessed ... – HashimR

Respuesta

10

Cuando hace clic en el botón "borrar", solo el elemento enfocado es el botón "borrar". Tendrás que solucionarlo. (desencadenar evento onblur)

+0

sí . ese es el problema. intenté usar document.activeElement pero no uso. :( – HashimR

+2

Ohh esa paradoja es trágica ... * sollozo de sollozos * – DhruvPathak

+1

Odio la forma en que el evento 'focus' no tiene una propiedad' justblurred' (o similar). Podría ser 'null' donde no es un particular elemento. – nnnnnn

2

Como menciona Génesis, el botón de borrar tendrá el foco cuando se haga clic. Sin embargo, es posible que pueda solucionar esto teniendo un evento onBlur para su formulario que almacenara la identificación del elemento previamente tocado en una entrada variable o de forma oculta.

+0

buena solución. – genesis

6
var focused, inputs=document.getElemntsByTagName('input'); 
for (var i=0, input; i<inputs.length && input = inputs[i]; i++) { 
    if (input.type === 'text') { 
     // Better use addEventListener and attachEvent, I'm just too lazy to type that on my phone 
     input.onfocus = function() { 
      focused = this; 
     } 
    } 
} 

O en jQuery: var focused; $('input:text').focus(function(){focused = this;});

Than, cuando se quiere borrar el elemento enfocado, focused.value='';

+1

él no tiene la etiqueta "jQuery" allí;) No es mi voto negativo aunque – genesis

+0

Oh, lo siento, estoy acostumbrado a 99 % de las preguntas de JavaScript están relacionadas con jquery. Actualizaré la respuesta, pero me tomará algo de tiempo tipearla desde mi teléfono móvil – shesek

+0

genial ... +1. Gracias –

10

crear una variable global para almacenar el id del elemento con foco actual,

var cur_id; 

llame a una función para onblur de cada uno de los elementos y pase la identificación

<input type="text" id="name" name="name" onBlur="setId(this.id)"> 

y escribir el conjunto de la identificación a la variable global desde esa función

function setId(id) { 
    cur_id = id; 
} 

y escribir una función para onclick del botón de limpieza, como este

function clear() { 
    document.getElementById(cur_id).value = ""; 
} 
+0

+ 1. No tengo suficiente tiempo (escuela) para escribir algún código – genesis

+0

-1 para jus obstruyentes. – shesek

+0

¿Qué tal crear una variable * local *? demasiado nervioso, sé –

3

La forma más sencilla es almacene una referencia a document.activeElement dentro del evento mousedown en el botón, aunque este es un enfoque centrado en el mouse y no funcionará para los "clics" de botones desde teclados y otros dispositivos.

Demostración en directo: http://jsfiddle.net/tEP6w/

Código:

var clearButton = document.getElementById("clear"); 
var previousActiveElement = null; 

clearButton.onmousedown = function() { 
    previousActiveElement = document.activeElement; 
}; 

clearButton.onclick = function() { 
    if (previousActiveElement && previousActiveElement != this) { 
     previousActiveElement.value = ""; 
    } 
}; 

Un mejor enfoque sería para almacenar una referencia a document.activeElement que el botón está a punto de recibir el foco. Sin embargo, esto es un poco complicado de lograr muy bien en todos los navegadores.

0

Trabajando en las ideas arriba, y si está trabajando con un formulario, puede definir una entrada oculta y asignarle un valor de ID de la última entrada de centrado:

<input type="hidden" id="focused_element" value=""> 

$('input:text, textarea').focus(function() { 
    $('#focused_element').val($(this).attr('id')); 
}); 

y luego recoger el valor en el momento posterior apropiado:

var focused = $('#focused_element').val(); 
Cuestiones relacionadas