【发布时间】:2021-12-03 05:38:48
【问题描述】:
我正在处理一个大型的遗留 Asp.Net 网络表单项目。我有一个字段可以访问我们的服务器以检查验证的唯一性。此过程中的所有内容都在工作,除了重要字段将在更改焦点后在 keyup 上验证,然后重新关注该字段。该字段是一个简单的 html 输入。在其他事件中,我尝试将 onkeyup 设置为 false。我曾尝试使用自定义 onkeyup。无论我尝试什么,keyup 验证都会不断返回。
用户将专注于该字段并输入他们的数据。在初始输入期间,验证不会触发,直到焦点更改。然后,当用户再次关注该字段时,验证会在每个键上触发。我必须阻止这种行为以减少网络流量。否则,我会称之为好并继续前进。非常感谢任何建议。以下代码是从项目中简化的,但仍然给我提到的行为。如果我能澄清任何事情,请告诉我。
jQuery v3.4.1 jQuery 验证插件 - v1.19.0
<form id="form1" runat="server">
<div style="padding: 100px;">
<div class="control-group">
<label for="claimNumber" class="control-label" style="width: 200px;">Claim #*</label>
<div class="controls" style="margin-left:20px">
<input type="text" class="form-control span3" id="claimNumber" name="claimNumber" maxlength="128"/>
<button style="margin-left: 10px">Validate</button>
</div>
</div>
</div>
</form>
<script>
var isUsed;
var form = $("#form1").show();
var form1ValidationRules = {
rules: {
claimNumber: {
uniqueClaim: true,
required: true
}
}
};
var validateForm = function () {
$('input,select,textarea', 'div.hide').not('input[type=radio]').each(function () {
$(this).val('');
});
return $("#form1").validate(form1ValidationRules).form();
};
$(document).ready(function () {
$.validator.addMethod(
"uniqueClaim",
function () {
console.log("validating");
return (isUsed == false)
},
"Claim number is already in use for your company."
);
$('form#form1').validate(form1ValidationRules);
$('#myform').validate({
onkeyup: false
});
});
</script>
【问题讨论】:
-
您是否在项目中使用不显眼的验证?如果是这样,您的自定义
.validate()及其所有选项都将被忽略。 -
我 99% 确定我们没有使用 Unobtrusive。我们今天早上找到了解决方案。我稍后会用解决方案更新帖子。
-
不确定该解决方案是什么,因为在正确配置插件后
onkeyup: false可以正常工作。 -
根据您的问题描述...
onkeyup最初似乎只是被禁用,因为该插件默认使用“惰性”验证。然后在重新聚焦字段onkeyup后,因为这是默认行为。您只是在描述正常的默认值。如果您在正确的初始化过程中成功应用onkeyup: false,那么它始终会被完全禁用。正如我的回答中所解释的,您上面的代码调用了两次.validate()...onkeyup: false的第二个实例将被忽略。
标签: javascript jquery asp.net jquery-validate