立即触发 JQuery 多个元素的验证
Trigger JQuery validation for multiple elements instantly
我有四个要素,每个要素都与其他要素有关有效性。例如,元素是 a、b、c 和 d。如果 d 为空,则用户必须为 a、b、c 输入一些值,如果 a、b、c 为空,则用户必须为 d 输入一些值。
我创建了一个自定义验证,如您在代码片段中所见,但它自然只检查聚焦输入,因此如果您在 a、b 和 c 上提供一些值,它只会验证 c,而对于 a 和 b,您必须再次聚焦它们。我希望此验证同时触发所有这些输入,如果它 returns 为真,则声明所有其他输入有效。你能帮帮我吗?
编辑一个更好的例子:当第一次点击提交按钮时,它会显示所有输入无效,因为它们是空的。将一些值放在 d 上足以验证表单,因此当我将一些值放在 d 上并从中移出焦点时,我希望所有输入都更新为有效。
谢谢。
(function ($) {
$.validator.addMethod('adreskontrol', function (value, element) {
if ($("#d").val() == "" && ($("#a").val() == "" || $("#b").val() == "" || $("#c").val() == "")) {
return false;
}
else {
return true;
}
});
}(jQuery));
$.validator.unobtrusive.adapters.addBool('adreskontrol');
$('#btn').click(function() {
if($("#test").valid() === false) {
//What to do if validation fails
} else if($("#test").valid() === true) {
//Show the preview and let the user either make changes or submit the final result
}
});
.input-validation-error
{
border:1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.10/jquery.validate.unobtrusive.min.js"></script>
<form id="test">
a: <input type="text" name="testa" class="testa" id="a" data-val-adreskontrol = "checka" data-val = "true">
<label for="testa"></label>
</br>
b: <input type="text" name="testb" class="testa" id="b" data-val-adreskontrol = "checkb" data-val = "true">
<label for="testb"></label>
</br>
c: <input type="text" name="testc" class="testa" id="c" data-val-adreskontrol = "checkc" data-val = "true">
<label for="testc"></label>
</br>
d: <input type="text" name="testd" class="testa" id="d" data-val-adreskontrol = "checkd" data-val = "true">
<label for="testd"></label>
</br>
<input type="submit" id="btn" value="Test"/>
</form>
为所有添加相同的 class,然后尝试计算错误数。
if ($('.class_name').length > 0) {
}
我通过重新检查 keyup 上的任何输入的表单验证来处理它,如下所示:
(function ($) {
$.validator.addMethod('adressCheck', function (value, element) {
if ($("#d").val() == "" && ($("#a").val() == "" || $("#b").val() == "" || $("#c").val() == "")) {
return false;
}
else {
return true;
}
});
}(jQuery));
$.validator.unobtrusive.adapters.addBool('adressCheck');
$(".adressInput").on("keyup", function () {
$("#testForm").valid();
});
$('#btn').click(function() {
if($("#testForm").valid() === false) {
} else if($("#testForm").valid() === true) {
}
});
.input-validation-error
{
border:1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.10/jquery.validate.unobtrusive.min.js"></script>
<form id="testForm">
a: <input type="text" name="testa" class="adressInput" id="a" data-val-adressCheck = "checka" data-val = "true">
<label for="testa"></label>
</br>
b: <input type="text" name="testb" class="adressInput" id="b" data-val-adressCheck = "checkb" data-val = "true">
<label for="testb"></label>
</br>
c: <input type="text" name="testc" class="adressInput" id="c" data-val-adressCheck = "checkc" data-val = "true">
<label for="testc"></label>
</br>
d: <input type="text" name="testd" class="adressInput" id="d" data-val-adressCheck = "checkd" data-val = "true">
<label for="testd"></label>
</br>
<input type="submit" id="btn" value="Test"/>
</form>
我有四个要素,每个要素都与其他要素有关有效性。例如,元素是 a、b、c 和 d。如果 d 为空,则用户必须为 a、b、c 输入一些值,如果 a、b、c 为空,则用户必须为 d 输入一些值。 我创建了一个自定义验证,如您在代码片段中所见,但它自然只检查聚焦输入,因此如果您在 a、b 和 c 上提供一些值,它只会验证 c,而对于 a 和 b,您必须再次聚焦它们。我希望此验证同时触发所有这些输入,如果它 returns 为真,则声明所有其他输入有效。你能帮帮我吗?
编辑一个更好的例子:当第一次点击提交按钮时,它会显示所有输入无效,因为它们是空的。将一些值放在 d 上足以验证表单,因此当我将一些值放在 d 上并从中移出焦点时,我希望所有输入都更新为有效。
谢谢。
(function ($) {
$.validator.addMethod('adreskontrol', function (value, element) {
if ($("#d").val() == "" && ($("#a").val() == "" || $("#b").val() == "" || $("#c").val() == "")) {
return false;
}
else {
return true;
}
});
}(jQuery));
$.validator.unobtrusive.adapters.addBool('adreskontrol');
$('#btn').click(function() {
if($("#test").valid() === false) {
//What to do if validation fails
} else if($("#test").valid() === true) {
//Show the preview and let the user either make changes or submit the final result
}
});
.input-validation-error
{
border:1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.10/jquery.validate.unobtrusive.min.js"></script>
<form id="test">
a: <input type="text" name="testa" class="testa" id="a" data-val-adreskontrol = "checka" data-val = "true">
<label for="testa"></label>
</br>
b: <input type="text" name="testb" class="testa" id="b" data-val-adreskontrol = "checkb" data-val = "true">
<label for="testb"></label>
</br>
c: <input type="text" name="testc" class="testa" id="c" data-val-adreskontrol = "checkc" data-val = "true">
<label for="testc"></label>
</br>
d: <input type="text" name="testd" class="testa" id="d" data-val-adreskontrol = "checkd" data-val = "true">
<label for="testd"></label>
</br>
<input type="submit" id="btn" value="Test"/>
</form>
为所有添加相同的 class,然后尝试计算错误数。
if ($('.class_name').length > 0) {
}
我通过重新检查 keyup 上的任何输入的表单验证来处理它,如下所示:
(function ($) {
$.validator.addMethod('adressCheck', function (value, element) {
if ($("#d").val() == "" && ($("#a").val() == "" || $("#b").val() == "" || $("#c").val() == "")) {
return false;
}
else {
return true;
}
});
}(jQuery));
$.validator.unobtrusive.adapters.addBool('adressCheck');
$(".adressInput").on("keyup", function () {
$("#testForm").valid();
});
$('#btn').click(function() {
if($("#testForm").valid() === false) {
} else if($("#testForm").valid() === true) {
}
});
.input-validation-error
{
border:1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.10/jquery.validate.unobtrusive.min.js"></script>
<form id="testForm">
a: <input type="text" name="testa" class="adressInput" id="a" data-val-adressCheck = "checka" data-val = "true">
<label for="testa"></label>
</br>
b: <input type="text" name="testb" class="adressInput" id="b" data-val-adressCheck = "checkb" data-val = "true">
<label for="testb"></label>
</br>
c: <input type="text" name="testc" class="adressInput" id="c" data-val-adressCheck = "checkc" data-val = "true">
<label for="testc"></label>
</br>
d: <input type="text" name="testd" class="adressInput" id="d" data-val-adressCheck = "checkd" data-val = "true">
<label for="testd"></label>
</br>
<input type="submit" id="btn" value="Test"/>
</form>