javascript - event.target 是否包含唯一的位置属性,因此不必使用 data-* 创建自定义元素属性?
问题描述
在下面的简单测试代码中,我创建了一个数据属性,data-position
为每个元素分配一个唯一标识符。我在函数中使用这些标识符,labelShrink
并labelGrow
在触发事件侦听器后定位正确的元素。我浏览了一下event.target
,找不到任何唯一的位置标识符,可以让我绕过创建一个独特的data-*
属性。 是否存在允许我在不添加自己的自定义属性的情况下定位元素的本机属性或方法?
'use strict';
var numberOfInputs = document.querySelectorAll('.inputStyle').length;
var i;
for (i = 0; i < numberOfInputs; i++) {
document.querySelectorAll('.inputStyle')[i].setAttribute('data-position', i);
document.querySelectorAll('.inputStyle')[i].addEventListener('focus', labelShrink);
document.querySelectorAll('.inputStyle')[i].addEventListener('blur', labelGrow);
}
//this is where I use data-position
function labelShrink(event) {
document.querySelectorAll('.inputLabel')[event.target.dataset.position].style.fontSize = ".75rem";
}
//this is where I use data-position
function labelGrow() {
if (!document.querySelectorAll('.inputStyle')[event.target.dataset.position].value) {
document.querySelectorAll('.inputLabel')[event.target.dataset.position].style.fontSize = "1.5rem";
}
}
.inputLabel {
position: absolute;
z-index: -1;
padding: .25rem 0 0 .25rem;
font-size: 1.5rem;
color: rgb(64, 64, 64);
user-select: none;
transition: font-size .25s;
}
.inputStyle {
padding-top: 1rem;
font-size: 2rem;
font-family: arial;
background-color: transparent;
}
<form class="formStyle">
<div class="inputContainer">
<div class="inputLabel">Phone Number</div>
<input type="text" name="phoneOne" class="inputStyle">
</div>
<br>
<div class="inputContainer">
<div class="inputLabel">Secondary Phone Number</div>
<input type="text" name="phoneTwo" class="inputStyle">
</div>
<input type="submit" value="Submit">
</form>
解决方案
如果您不想使用其他属性,可以通过event.target.previousElementSibling访问 .inputLabel
推荐阅读
- reactjs - 这是更新状态的正确方法吗?
- angular - Google Cloud Build - firebase 部署错误:“公共目录 'dist/browser' 不存在,无法将托管部署到站点 PROJECT-ID”
- flutter - 如何使用 CupertinoSliverNavigationBar Flutter 制作顶部标签栏
- scala - 解析scala宏中的类型投影
- spring-boot - java 8中如何实现异步重试机制?
- python - 保存表单时如何将数据传递给模型字段?django表单模型保存
- java - 为什么这是错的?
- ios - KeyboardAvoidingView 在 iOS 中无法正常工作
- swift - 设计膳食跟踪应用程序的数据模型
- node.js - 无法访问容器中的 Dockerized Angular 应用程序