Есть ли способ предотвратить включение HTML accesskey = ""? - программирование
Подтвердить что ты не робот

Есть ли способ предотвратить включение HTML accesskey = ""?

Я пробовал preventDefault(), но у меня не было успеха. Есть что-то, что мне не хватает?

Я попытался бы отключить его по всему миру, если возможно (например, зарегистрировать события на window)

4b9b3361

Ответ 1

Кажется, что нет способа остановить событие от запуска. Единственной альтернативой, по-видимому, является временное удаление атрибутов accesskey, пока вы не хотите, чтобы они работали. То, что jQuery UI должен делать для модальных диалогов.

Вот код из этого потока:

$("#boxA-dialog").dialog({
    autoOpen: false,
    modal: true,
    height: 400,
    width: 300,
    open: function(event, ui) {
        ak = $('[accesskey]').each(function() {
            $(this).data('ak', $(this).attr('accesskey')).removeAttr('accesskey')
        })
    },
    close: function(event, ui) {
        ak.each(function() {
            $(this).attr('accesskey', $(this).data('ak'))
        })
    }
});

Как вы можете видеть, что он сохраняет атрибуты accesskey для данных jQuery перед их удалением:

$(this).data('ak', $(this).attr('accesskey')).removeAttr('accesskey')

а затем восстановить их из данных:

$(this).attr('accesskey', $(this).data('ak'))

Меня бы заинтересовало решение, которое фактически предотвращает событие, а не использует этот обходной путь.

Ответ 2

Если я правильно понимаю вашу проблему, вы можете попробовать это.

$('[accesskey*=]').focus(function(e) { 
    // disable accesskey functionality 
});
$('[accesskey*=]').blur(function(e) { 
    // reenable accesskey functionality 
});

Ответ 3

Используя предыдущий ответ, вы можете использовать этот трюк, чтобы "удалить" все параметры "accesskey" со страницы.

$('[accesskey*=]').attr('accesskey','');

Просто установите для всех страниц доступа на странице.