javascript - 如何在焦点事件的元素下方动态添加跨度?
问题描述
我正在编写自己的验证代码,但我不知道如何在输入值长度为 0 时在输入下方动态添加带有消息的跨度。我知道我可以在每个输入元素下方放置一个跨度并在需要之前给他们一个无显示,但这会破坏动态创建跨度的目的,并且可能需要一段时间才能取决于它的使用方式。
我将如何实现这一目标?
<style scoped>
#userDetails {
margin-top:60px;
}
</style>
<div id="userDetails" class="form-horizontal">
<div class="row">
<div class="form-group">
<label class="col-md-2 control-label" for="txtFirstName">First Name</label>
<div class="col-md-6 col-lg-6">
<input id="txtFirstName" is-required class="form-control input-sm" />
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label class="col-md-2 control-label" for="txtLastName">Last Name</label>
<div class="col-md-6 col-lg-6">
<input id="txtLastName" is-required class="form-control input-sm" />
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label class="col-md-2 control-label" for="txtEmail">E-mail</label>
<div class="col-md-6 col-lg-6">
<input id="txtEmail" is-required class="form-control input-sm" />
</div>
</div>
</div>
</div>
function ValidationCheck() {
let isRequired = document.querySelectorAll('[is-required]');
isRequired.forEach(function(element) {
element.addEventListener('focusout', (e) => {
if (element.value.length == 0) {
element.style.border = "1px solid red";
if (element.classList.contains("clear")) {
element.classList.remove("clear");
}
} else {
element.style.border = "1px solid green";
element.classList.add("clear");
}
});
element.addEventListener('keyup', (e) => {
element.style.border = "1px solid green";
});
});
}
$(document).ready(function() {
ValidationCheck();
});
function ValidationCheck() {
let isRequired = document.querySelectorAll('[is-required]');
isRequired.forEach(function(element) {
element.addEventListener('focusout', (e) => {
if (element.value.length == 0) {
element.style.border = "1px solid red";
if (element.classList.contains("clear")) {
element.classList.remove("clear");
}
} else {
element.style.border = "1px solid green";
element.classList.add("clear");
}
});
element.addEventListener('keyup', (e) => {
element.style.border = "1px solid green";
});
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<style scoped>
#userDetails {
margin-top: 60px;
}
</style>
<div class="container">
<div id="userDetails" class="form-horizontal">
<div class="row">
<div class="form-group">
<label class="col-sm-2 col-md-2 control-label" for="txtFirstName">First Name</label>
<div class="col-sm-6 col-md-6 col-lg-6">
<input id="txtFirstName" is-required class="form-control input-sm" />
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label class="col-sm-2 col-md-2 control-label" for="txtLastName">Last Name</label>
<div class="col-sm-6 col-md-6 col-lg-6">
<input id="txtLastName" is-required class="form-control input-sm" />
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label class="col-sm-2 col-md-2 control-label" for="txtEmail">E-mail</label>
<div class="col-sm-6 col-md-6 col-lg-6">
<input id="txtEmail" is-required class="form-control input-sm" />
</div>
</div>
</div>
</div>
</div>
解决方案
这是添加包含一些文本的跨度的示例,请根据您的需要进行编辑/更新/更改。
$(document).ready(function() {
ValidationCheck();
});
function ValidationCheck() {
let isRequired = document.querySelectorAll('[is-required]');
isRequired.forEach(function(element) {
element.addEventListener('focusout', (e) => {
if (element.value.length == 0) {
element.style.border = "1px solid red";
var parentDiv = element.parentNode;
var para = document.createElement("span");
var node = document.createTextNode("This is new.");
para.appendChild(node);
parentDiv.appendChild(para);
if (element.classList.contains("clear")) {
element.classList.remove("clear");
}
} else {
element.style.border = "1px solid green";
element.classList.add("clear");
}
});
element.addEventListener('keyup', (e) => {
element.style.border = "1px solid green";
});
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<style scoped>
#userDetails {
margin-top: 60px;
}
</style>
<div class="container">
<div id="userDetails" class="form-horizontal">
<div class="row">
<div class="form-group">
<label class="col-sm-2 col-md-2 control-label" for="txtFirstName">First Name</label>
<div class="col-sm-6 col-md-6 col-lg-6">
<input id="txtFirstName" is-required class="form-control input-sm" />
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label class="col-sm-2 col-md-2 control-label" for="txtLastName">Last Name</label>
<div class="col-sm-6 col-md-6 col-lg-6">
<input id="txtLastName" is-required class="form-control input-sm" />
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<label class="col-sm-2 col-md-2 control-label" for="txtEmail">E-mail</label>
<div class="col-sm-6 col-md-6 col-lg-6">
<input id="txtEmail" is-required class="form-control input-sm" />
</div>
</div>
</div>
</div>
</div>
推荐阅读
- ruby - 使用 Jekyll 时出现液态语法错误 - 意外字符
- dm-script - EFTEM 模式下 centerZLP 的 DM 脚本/命令
- css - NativeScript - 如何在应用程序的整个 scss 中使用 SASS 变量?
- firebase - 'firebase init' 给我一个离子项目的一般错误
- javascript - 在快速 ontouch IOS 期间跳过音频
- python - 减少 df.loc 的内存消耗并删除特定列中特定字符的行
- ansible - 使用 Ansible 替换 war 文件中的变量
- python - 如何在 colab 中忽略或删除“.ipynb_checkpoints”?
- raster - PyGeoprocessing 库中允许重新分类栅格值的函数是什么?
- c++ - epoll_wait 在按下 enter 之前不会唤醒