Как заставить кнопки не фокусироваться?
Я хочу, чтобы мои (внешние) панели инструментов не, чтобы захватить фокус на веб-странице при нажатии, но сделать свою "вещь", оставив фокус без изменений кликом. Как это сделать?
Ответы
Ответ 1
Я не думаю, что есть простой способ сделать то, что вы хотите сделать, потому что это поведение браузера по умолчанию.
Вы можете, конечно, размыть() кнопку, как только она будет нажата, но это просто отменит выбор всего. Чтобы активировать ранее активный объект, вам нужно создать "память" из родов, добавив обработчик размытия для каждого элемента, чтобы отслеживать, какой элемент имел/потерял фокус в прошлом (хранить идентификатор элемента в глобальном и обновлять его, когда элемент теряет фокус).
Ответ 2
Отмена поведения по умолчанию onmousedown
не позволяет элементу получить фокус:
// Prevent capturing focus by the button.
$('button').on('mousedown',
/** @param {!jQuery.Event} event */
function(event) {
event.preventDefault();
}
);
Ответ 3
document.activeElement сохраняет текущий сфокусированный элемент.
Итак, на панели инструментов вы можете добавить обработчик "mousedown" к этой функции:
function preventFocus() {
var ae = document.activeElement;
setTimeout(function() { ae.focus() }, 1);
}
Попробуйте этот пример:
<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>
Ответ 4
Поскольку кнопки на панели инструментов просто стилируют обычные элементы HTML-кнопки, то это фактическое поведение браузера, и вы должны подумать дважды, прежде чем менять его. Но тем не менее...
Вы должны быть в состоянии предотвратить попадание botton из фокуса, просто вернув false
из своего обработчика onclick
.
Ответ 5
Возможно, вам стоит попробовать использовать stateful
и изменить свойства изменения полей формы или что-то еще, чтобы вернуть фокус?
Ответ 6
Я приложил бы один прослушиватель событий размытия ко всем полям. Этот слушатель должен сохранить поле, которое потеряло фокус, в глобальной переменной.
Затем все кнопки панели инструментов должны получить один прослушиватель событий фокуса. Этот слушатель должен сфокусировать поле, которое было сохранено, как описано выше.
Этот код должен работать, хотя он не тестировал его
Ответ 7
<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>
Что я нашел, вам нужно будет создать фиктивный элемент, я нашел кнопки, чтобы работать лучше всего в этой ситуации. поместите кнопку в div и сделайте div 0px.
[не делайте div display none, некоторые браузеры просто игнорируют его]
В принципе, нажатие любой кнопки или кнопки фокусируется на этой манекене.
У меня был очень похожий проект, и всякий раз, когда они нажимали клавишу "вниз", он выбирал первую кнопку на странице, это просто фокусируется на кнопке снова и снова.
Сортировка вверх, но она работает.