【发布时间】:2020-05-07 15:24:50
【问题描述】:
我正在尝试在设置data-attribute 的链接上获取焦点方法(触摸、鼠标或键盘)。
$(function() {
var i,
r = document.getElementsByTagName("a")[0];
if ("ontouchstart" in window) {
document.addEventListener("touchstart", function(event) {
i = "touch";
}, true);
}
else {
document.addEventListener("mousedown", function(event) {
i = "mouse";
}, true);
}
document.addEventListener("keydown", function(event) {
i = "keyboard";
}, true);
})
问题是我只得到了用 jQuery 编写最后一部分的结果:
$("a").focus(function() {
$(this).attr("data-focus-method", i)
})
$("a").blur(function() {
$(this).removeAttr("data-focus-method")
})
我想用纯 JavaScript 编写整个代码。我试过下面的方法:
r.addEventListener("focus", function() {
r.setAttribute("data-focus-method", i);
});
r.addEventListener("blur", function() {
r.removeAttribute("data-focus-method");
});
但它不起作用。 有人可以帮帮我吗?
【问题讨论】:
-
这里的代码和你的实际代码一样吗?当您提到“on links”时,此行似乎很可疑
r = document.getElementsByTagName("a")[0]- 即您的文本暗示多个/所有链接,但您的代码指示 first 链接(这在本身)。如果您实际上有类似for (var idx in document.getElementsByTagName("a")) { var r = document.getElementsByTagName("a")[idx]的东西,那么这就是您的问题 - r 在它到达事件侦听器时会发生变化,因此使用this。 -
@freedomn-m 问题是,当我删除
[0]时,我收到“r.addEventListener 不是函数”错误消息。 -
你的代码works just fine。
-
@ArthurOtaviano 那是因为
getElementsByTagName()返回一个你需要遍历的nodeList 并在每个单独的元素上调用addEventListener -
这不是关于 删除
[0]- 更多的是你的真实代码使用[i](或类似的)?
标签: javascript jquery frontend web-frontend code-conversion