【问题标题】:is there a way to prevent HTML's accesskey="" from being activated?有没有办法阻止 HTML accesskey="" 被激活?
【发布时间】:2014-05-05 10:19:16
【问题描述】:

我尝试了preventDefault(),但没有成功。有什么我遗漏的吗?

如果可能,我会尝试全局禁用它(例如在window 上注册事件)

【问题讨论】:

  • 按键组合取决于平台,但我说的是 html accesskeys
  • 为什么不直接删除属性?
  • 我认为这会影响可访问性...这是唯一的选择吗?
  • 呃……?它会不会和preventDefault() 有同样的影响(假设preventDefault() 会起作用)?可以使用 JS 删除/返回属性,如果这是您的重点,您不必从文件中删除它们。
  • 您的解决方案确实会影响可访问性。因为屏幕阅读器会说,例如,“保存按钮 alt+S”,但是当用户按下 alt+S 时,由于您的 preventDefault() 或其他原因,什么都不会发生。所以只需删除accesskey 属性。

标签: javascript html dom accessibility wai-aria


【解决方案1】:

似乎没有办法阻止事件触发。唯一的选择似乎是在您不希望它们工作时暂时删除 accesskey 属性。这就是jQuery UI has to do for modal dialogs

这是来自该线程的代码:

$("#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*=]').attr('accesskey','');
    

    只需设置页面上的所有accesskey即可。

    【讨论】:

    • 你可能需要恢复属性。
    • 但这不是问题所在。所以没必要把它复杂化,不是吗?
    • 如果他们只是要被删除,他们一开始就不应该在那里。我假设 Wes 使用“防止”一词,他只希望它们在某些条件下被阻止,并且当这些条件不满足时,它们应该正常工作。
    • 那么他只需要在 jQuery 函数周围放置条件。不难实现,在任何情况下,wes 都没有选择/回答线程,所以让我们把它留在那里。除非您找到“解决方法”解决方案。会感兴趣的!
    • 我认为我没有很好地解释自己。当我说“在某些条件下”时,我的意思是在不同的时间点,访问密钥应该和不应该工作。因此,在某个时间点,您可能希望删除访问密钥,然后您可能希望将其恢复。所以在 jQuery 周围设置一个条件是行不通的;它不提供以后恢复属性的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多