Ответ 1
Когда вы нажимаете кнопку "Очистить", только кнопка с подсветкой - это "четкая" кнопка. Вам придется обходить это. (событие триггера onblur)
У меня есть HTML-форма с несколькими текстовыми вводами. Я хочу очистить элемент, который имел фокус непосредственно перед нажатием кнопки "Очистить". Как получить этот элемент в JavaScript?
Примечание. Отправлено с учетом комментариев.
Когда вы нажимаете кнопку "Очистить", только кнопка с подсветкой - это "четкая" кнопка. Вам придется обходить это. (событие триггера onblur)
Создайте глобальную переменную для хранения текущего сфокусированного элемента 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 = "";
}
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='';
Самый простой способ - сохранить ссылку на 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
, поскольку кнопка собирается получить фокус. Тем не менее, это немного сложно реализовать во всех браузерах.
Как упоминает Genesis, кнопка очистки будет иметь фокус при нажатии. Тем не менее, вы можете обойти это, имея событие onBlur для своей формы, которое будет хранить идентификатор ранее затронутого элемента в виде переменной или скрытой формы.
Работа над приведенными выше идеями, и если вы работаете с формой, вы можете определить скрытый ввод и присвоить ему значение последнего сфокусированного входного идентификатора:
<input type="hidden" id="focused_element" value="">
$('input:text, textarea').focus(function() {
$('#focused_element').val($(this).attr('id'));
});
а затем выберите значение в соответствующее позднее время:
var focused = $('#focused_element').val();