javascript - 为什么当我填写最后一个输入时我的表单会验证,即使所有其他输入都是空的?
问题描述
我有一个我正在尝试验证的联系表。我知道您可以只使用默认的“必需”属性,但是,我需要自定义验证错误消息。所以,我创建了这个 JS 类——当你初始化类时,你传入参数,例如你的目标表单、表单中的输入和提交按钮。
这是我的 codepen 的链接:https ://codepen.io/Woodenchops/pen/oKxRGq?editors=1010
我尝试将 if 语句检查从“this”关键字更改为字段名称“.field.required” - 当我这样做时,第一个输入会响应按钮,即使所有其他输入都是空的
this._input = this._form.querySelectorAll(props.input);
this.checkFieldValue = function() {
jQuery(this._input).each(function() {
console.log(jQuery(this).val().length);
if(jQuery(this).val().length <= 0) {
$('.fake-click').show();
var submitHeight = jQuery(submitButton).innerHeight();
var submitWidth = jQuery(submitButton).innerWidth();
var submitInputTop = jQuery(submitButton).position().top;
var submitInputLeft = jQuery(submitButton).position().left;
$('.fake-click').css({
"background": "none",
"width": submitWidth + 5,
"height": submitHeight + 5,
"position": "absolute",
"top": submitInputTop,
"left": submitInputLeft,
"z-index": "1"
});
$(submitButton).css({
"opacity": .5
});
} else {
$('.fake-click').hide();
$(submitButton).css({
"opacity": 1
});
}
});
}
这堂课上发生了很多事情。但是,我正在尝试这样做,以便如果任何必填字段为空,则提交按钮将被禁用。我使用 jQuery each loop 循环遍历每个输入以检查值长度。它有点工作 - 您可以从第一个输入开始,输入一个值并一直到最后一个输入 - 提交按钮将保持禁用状态,直到您输入最后一个字段。但是,如果您只是转到最后一个输入并输入一个值,它将响应提交按钮 - 即使每个其他输入都是空的。
然后我在输入的“keyup”事件上调用该函数
解决方案
您循环遍历所有输入并在每次迭代后启用/禁用提交按钮。只有最后一次迭代(最后一次输入)会决定提交按钮的状态。
如果任何输入无效,您可以通过存储布尔值来解决此问题,并使用它来确定是否应启用提交按钮。像这样:
this.checkFieldValue = function () {
let isValid = true;
jQuery(this._input).each(function () {
console.log(jQuery(this).val().length);
if (jQuery(this).val().length <= 0) {
isValid = false;
}
});
if (isValid === false) {
$('.fake-click').show();
var submitHeight = jQuery(submitButton).innerHeight();
var submitWidth = jQuery(submitButton).innerWidth();
var submitInputTop = jQuery(submitButton).position().top;
var submitInputLeft = jQuery(submitButton).position().left;
$('.fake-click').css({
"background": "none",
"width": submitWidth + 5,
"height": submitHeight + 5,
"position": "absolute",
"top": submitInputTop,
"left": submitInputLeft,
"z-index": "1"
});
$(submitButton).css({
"opacity": .5
});
} else {
$('.fake-click').hide();
$(submitButton).css({
"opacity": 1
});
}
}
推荐阅读
- javascript - 在 jquery 插件中仅更改一种选择样式
- php - CodeIgniter - 如何在没有内存泄漏的情况下选择大表中的所有行
- java - 如何使用休眠执行庞大的 sql 本机代码?
- firebase - 有没有办法使用firebase的云功能从“child_added”事件的节点获取数据?
- ruby-on-rails - 多对多关系activerecord上的聚合
- android - Android:无法解析符号 FirebaseDatabase
- python - 如何将 BeautifulSoup 标签转换为 JSON?
- php - 是否有可以根据自定义边界规则限制类导入的 PHP linter?
- php - 插入mysql数据库时如何防止小数四舍五入
- python - Python:在函数外调用类实例