javascript - HTMLElement.focus() 在 HTMLElement.onpointerdown 中不起作用
问题描述
假设我有这个html
文件
<!DOCTYPE html>
<html>
<head>
<script type="application/javascript" src="./jsfile.js" defer></script>
</head>
<body>
<p>some text</p>
<input type="text">
<body>
</html>
这个javascript
文件叫做jsfile.js
let p=document.getElementsByTagName("p");
let input=document.getElementsByTagName("input");
p.onpointerdown=()=>{
input[0].focus();
};
我在这里要做的是当在元素pointerdown
上调用事件时<p>
,输入元素会获得焦点。
我尝试了mouseclick
事件并且它有效,但我无法让它在pointerdown
事件中起作用。
解决方案
这里有几个问题:
- 您根本没有定义元素变量
- 您将获得一个元素列表(通过使用 document.getElementsByTagName)。在这种情况下,您将在p变量中获取项目集合,并且您不能在集合中使用 .focus 和其他内容(尽管在 jquery 中可能)
相反,你应该使用这样的东西:
// This will give you a single element
const p = document.querySelector("p");
// Same thing here
let input=document.querySelector("input");
p.onpointerdown = (e) => {
// This part is necessary here to avoid default begaviour
// Mose browsers would fire mousedown event if this event is not canceled, therefore it will affect your focus
e.preventDefault();
input.focus();
};
推荐阅读
- php - 我想在检查 ckeckfield 上获取文本字段的值
- javascript - 如果安装了应用程序,我们是否有任何自定义 url 方案重定向到 instagram 应用程序并在 android 中打开相机
- scala - 如何在Scala中打破地图并在断点处保存密钥
- java - 如何使用java在mongodb中添加新字段
- sql - 我在这个 Sql 代码的修改中哪里出错了?
- google-apps-script - 可安装的触发器和匿名帐户
- python-3.x - 需要一个矩阵,使得每个元素中的字符数不超过 5K
- http - 如何获取flutter的关键数据?
- sql-server - 插入时如何强制 NOT NULL 约束,而不影响现有的空值?
- routing - PFsense OpenVPN 端口转发