jquery - 在 Tabbable DIV 上的 onclick=".." 也会在没有键事件的情况下在 Enter 键上激活
问题描述
我想知道,在下面的 Tabbable DIV 示例中,我定义了一个onclick处理程序,但没有onkeyup/onkeydown处理程序。
但是,按 Enter 与实际单击 Div 具有相同的效果。如果我没有密钥处理程序,此功能从何而来?
要进行测试,首先通过单击第一个按钮来聚焦 Div,然后从那里开始。
function handleDiv() {
alert('Clicked');
}
#divClickable {
border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>
<button id="btnFocus" onclick="$('#divClickable').focus()">Click to focus DIV Below</button>
<div id="divClickable" tabindex="0" onclick="handleDiv()">This is a test DIV</div>
解决方案
这是提交按钮的标准行为。它是现代浏览器可访问性要求的一部分,因此通过键盘浏览 Web 的用户仍然可以使用键盘触发表单元素上的事件。
如果您想避免这种情况,一种解决方法是将按钮更改为,但请注意,如果您依赖按钮操作提交父元素type="button"
,这将产生副作用:form
$('#btnFocus').click(function() {
$('#divClickable').focus();
});
$('#divClickable').click(function() {
console.log('Clicked');
});
#divClickable {
border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>
<button id="btnFocus" type="button">Click to focus DIV Below</button>
<div id="divClickable" tabindex="0">This is a test DIV</div>
请注意,在上面的示例中,我使用了不显眼的事件处理程序。您不应该使用on*
事件属性,因为它们是不好的做法。
推荐阅读
- javascript - 有什么方法可以在 form.io 中本地使用嵌套表单?
- java - 如何使用 Java Springboot 返回一个 zip 文件流
- python - 如何使用 Azure DataBricks Api 提交作业?
- python-3.x - 如何在 Django 中将@property 添加到基本组模型?
- datatable - 将自定义数据值设置为 DataTable 中的列
- flutter - 添加业务逻辑以使用 PageView 或类似方式滑动
- linux - Linux 上是否有比 glibc 更低级别的 C API?
- android - 如何在 doWork() 调用后更新 PeriodicWorkRequest 的 timeInterval
- laravel - Laravel 8 - 类在测试中不使用类的模拟版本
- vba - 如何为从第 3 行开始的一系列列着色