如果 Javascript 输入和 select 框为空,如何检查页面加载
How to check on page load if input and select boxes are empty with Javascript
我正在使用 Vue.js 创建表单。目前我的 HTML 看起来像这样:
<div class="form-group m-0" role="group">
<label class="d-block form-label" for="code_part3">Last Three</label>
<div>
<input class="form-input form-control is-invalid hasError" type="text"><!----><!----><!---->
</div>
</div>
当用户关注输入或更改 select 框时,将向主父级 (.form-group) 添加 class (.focused)。这将使标签动画化以位于 input/select 框的顶部。在模糊时,一种方法是 运行 检查输入值是否为空。
resetAnimateInputLabel() {
var target = event.currentTarget;
var inputValue = event.currentTarget.value;
var parentOfParent = target.parentElement.parentElement;
if (inputValue == "") {
//remove focused class to Parent of Parent to animate
parentOfParent.classList.remove("focused");
}
}
但是我使用的是 localStorage,它会在用户 returns 访问页面时预填充输入字段。这会导致标签恢复到其原始位置(在输入本身内)并且两个文本冲突的问题。
解决此问题的最佳方法是什么,以便在页面加载时,如果输入框或 select 框为空,标签仍保持动画效果?
我试过以下方法:
创建了一个新方法:
checkInputEmpty() {
var inputs = document.getElementsByClassName("form-input");
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].value == "") {
inputs[i].parentElement.parentElement.classList.remove("focused");
} else {
inputs[i].parentElement.parentElement.classList.add("focused");
}
}
}
并在此处调用它:
mounted() {
this.checkInputEmpty();
if (localStorage.email !== "undefined") {
this.form.email = localStorage.email;
}
}
您可以通过两种不同的方式以简单而优雅的方式处理此问题:
首先 - 检查输入值:
第 1 步:拥有用于存储输入值的数据 属性
data () {
return {
inputValue: '',
}
}
第 2 步:将您的输入绑定到 属性
<input v-model="inputValue" />
第 3 步:调查数据 属性 并根据需要(在任何需要的地方)处理这两种情况
if (this.inputValue) {
// here, the input value is non-empty ("", null, undefined would evaluate to false)
} else {
// here, the input value is empty
}
第二 - Class 切换
第 1 步:您不必以这种复杂的方式设置和删除 classes:
inputs[i].parentElement.parentElement.classList.add("focused");
相反,您可以再次创建一个数据 属性 来存储 focused
class:
的切换状态
data () {
return {
inputValue: '',
formFocused: false
}
}
第 2 步:将 class 动态分配给您的元素,如下所示:
<div
class="form-group m-0" role="group"
:class="{ 'focused' : formFocused }"
>
...
</div>
第 3 步:并根据需要处理 属性,在您的情况下可能是这样的:
if (this.inputValue) {
this.formFocused = false;
} else {
this.formFocused = true;
}
与以下相同:
this.formFocused = !this.inputValue;
更多信息:
https://vuejs.org/v2/guide/forms.html#v-model-with-Components
我正在使用 Vue.js 创建表单。目前我的 HTML 看起来像这样:
<div class="form-group m-0" role="group">
<label class="d-block form-label" for="code_part3">Last Three</label>
<div>
<input class="form-input form-control is-invalid hasError" type="text"><!----><!----><!---->
</div>
</div>
当用户关注输入或更改 select 框时,将向主父级 (.form-group) 添加 class (.focused)。这将使标签动画化以位于 input/select 框的顶部。在模糊时,一种方法是 运行 检查输入值是否为空。
resetAnimateInputLabel() {
var target = event.currentTarget;
var inputValue = event.currentTarget.value;
var parentOfParent = target.parentElement.parentElement;
if (inputValue == "") {
//remove focused class to Parent of Parent to animate
parentOfParent.classList.remove("focused");
}
}
但是我使用的是 localStorage,它会在用户 returns 访问页面时预填充输入字段。这会导致标签恢复到其原始位置(在输入本身内)并且两个文本冲突的问题。
解决此问题的最佳方法是什么,以便在页面加载时,如果输入框或 select 框为空,标签仍保持动画效果?
我试过以下方法:
创建了一个新方法:
checkInputEmpty() {
var inputs = document.getElementsByClassName("form-input");
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].value == "") {
inputs[i].parentElement.parentElement.classList.remove("focused");
} else {
inputs[i].parentElement.parentElement.classList.add("focused");
}
}
}
并在此处调用它:
mounted() {
this.checkInputEmpty();
if (localStorage.email !== "undefined") {
this.form.email = localStorage.email;
}
}
您可以通过两种不同的方式以简单而优雅的方式处理此问题:
首先 - 检查输入值:
第 1 步:拥有用于存储输入值的数据 属性
data () {
return {
inputValue: '',
}
}
第 2 步:将您的输入绑定到 属性
<input v-model="inputValue" />
第 3 步:调查数据 属性 并根据需要(在任何需要的地方)处理这两种情况
if (this.inputValue) {
// here, the input value is non-empty ("", null, undefined would evaluate to false)
} else {
// here, the input value is empty
}
第二 - Class 切换
第 1 步:您不必以这种复杂的方式设置和删除 classes:
inputs[i].parentElement.parentElement.classList.add("focused");
相反,您可以再次创建一个数据 属性 来存储 focused
class:
data () {
return {
inputValue: '',
formFocused: false
}
}
第 2 步:将 class 动态分配给您的元素,如下所示:
<div
class="form-group m-0" role="group"
:class="{ 'focused' : formFocused }"
>
...
</div>
第 3 步:并根据需要处理 属性,在您的情况下可能是这样的:
if (this.inputValue) {
this.formFocused = false;
} else {
this.formFocused = true;
}
与以下相同:
this.formFocused = !this.inputValue;
更多信息:
https://vuejs.org/v2/guide/forms.html#v-model-with-Components