jquery - 如何对具有特定类的所有标签应用验证?
问题描述
我有一个循环表格。所有表格字段必须至少填写一次。对于字段,我添加了一个类。接下来,我检查是否有值。
我的形式(laravel 刀片)
@foreach($locales as $locale)
<div>
<label for="{{$locale.'[title]'}}">Title</label>
<input class="valid" name={{$locale.'[title]'}}
type="text"
id="{{$locale.'[title]'}}">
<label for="{{$locale.'[text]'}}" class="control-label">Text </label>
<textarea class="valid"
name="{{$locale.'[text]'}}"
id="{{$locale.'[text]'}}">
</textarea>
</div>
@endforeach
jQuery
$(document).ready(function () {
$('form').on('submit', function (event) {
validForm();
});
function validForm() {
$('.valid').each(function () {
if ($(this).val()) {
$result = true;
return false;
} else {
$result = false;
}
});
if (!($result)) {
event.preventDefault();
alert('error');
}
}
});
在这部分代码if ($(this).val()) {$result = true;return false;}
中,例如,如果 input 有一个值,则循环退出并且不检查 textarea。但是如果我删除return false
,那么所有表单的所有字段都需要填写(循环将绘制它们多少次)。
如何检查至少一个表单的所有字段是否都有值?或者如何正确地跳出循环?现在表单有2个字段,但是以后可能会更多,也就是校验应该是通用的。
解决方案
您可以像这样向父 div 添加一个类:
@foreach($locales as $locale)
<div class="part-form">
<label for="{{$locale.'[title]'}}">Title</label>
<input class="valid" name={{$locale.'[title]'}}
type="text"
id="{{$locale.'[title]'}}">
<label for="{{$locale.'[text]'}}" class="control-label">Text </label>
<textarea class="valid"
name="{{$locale.'[text]'}}"
id="{{$locale.'[text]'}}">
</textarea>
</div>
@endforeach
然后检查是否有任何part-form
已满。
基于您的代码的示例:
$(document).ready(function () {
$('form').on('submit', function (event) {
validForm();
});
function validForm() {
$(".part-form").each(function() {
var empty = $(this).find(".valid").filter(function() {
return $(this).val().trim() == "";
});
if (!empty.length) {
$result = true;
return false;
}
})
if (!($result)) {
event.preventDefault();
alert('error');
}
}
});
推荐阅读
- anypoint-studio - SAP 连接器配置 - Anypoint Studio 中的“测试连接”失败,但在部署时有效
- javascript - 如何在鼠标悬停时展开/折叠闪亮的仪表板侧边栏?
- c# - Todo.App 在 Todo.UWP.MainPage 中使用,但谁调用 Todo.UWP.App?
- javascript - 我的 JavaScript 时钟小部件使 Firefox 崩溃
- mongodb - kafka sink 连接器中无效 JSON 的错误处理
- google-play - NativeScript 货币化和广告,AdMob 插件
- ibm-integration-bus - 如何在 ESQL 中创建复杂对象
- c++ - 在从左值引用类型推导出的类型上调用静态 constexpr 成员函数时,clang 和 gcc 不一致
- reactjs - 无法更改 Formik 表单文本字段
- mysql - 如何在大 mysql 表中找到时间数据的间隙