Подтвердить что ты не робот

Как получить ранее сфокусированный элемент в JavaScript?

У меня есть HTML-форма с несколькими текстовыми вводами. Я хочу очистить элемент, который имел фокус непосредственно перед нажатием кнопки "Очистить". Как получить этот элемент в JavaScript?

Примечание. Отправлено с учетом комментариев.

4b9b3361

Ответ 1

Когда вы нажимаете кнопку "Очистить", только кнопка с подсветкой - это "четкая" кнопка. Вам придется обходить это. (событие триггера onblur)

Ответ 2

Создайте глобальную переменную для хранения текущего сфокусированного элемента id,

var cur_id;

вызвать одну функцию для onblur каждого из элементов и передать id

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

и записать набор id в глобальную переменную из этой функции

function setId(id) {
    cur_id = id;
}

и напишите функцию для щелчка кнопки очистки, например

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

Ответ 3

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;
        }
    }
}

Или в jQuery: var focused; $('input:text').focus(function(){focused = this;});

Затем, когда вы хотите очистить сфокусированный элемент, focused.value='';

Ответ 4

Самый простой способ - сохранить ссылку на document.activeElement в событии mousedown на кнопке, хотя это подход, ориентированный на мышь, и не будет работать на кнопки "клики" с клавиатуры и других устройств.

Live demo: http://jsfiddle.net/tEP6w/

код:

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

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

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

Лучшим подходом было бы сохранить ссылку на document.activeElement, поскольку кнопка собирается получить фокус. Тем не менее, это немного сложно реализовать во всех браузерах.

Ответ 5

Как упоминает Genesis, кнопка очистки будет иметь фокус при нажатии. Тем не менее, вы можете обойти это, имея событие onBlur для своей формы, которое будет хранить идентификатор ранее затронутого элемента в виде переменной или скрытой формы.

Ответ 6

Работа над приведенными выше идеями, и если вы работаете с формой, вы можете определить скрытый ввод и присвоить ему значение последнего сфокусированного входного идентификатора:

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

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

а затем выберите значение в соответствующее позднее время:

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