(Jquery Validate) onkeyup: false 适用于一个字段,直到我第二次选择它
Posted
技术标签:
【中文标题】(Jquery Validate) onkeyup: false 适用于一个字段,直到我第二次选择它【英文标题】:(Jquery Validate) onkeyup: false works for a field until I select it a second time 【发布时间】: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
的第二个实例将被忽略。
【参考方案1】:
$('form#form1').validate(form1ValidationRules);
$('#myform').validate(
onkeyup: false
);
$myform
在哪里?那将是一个带有id="myform"
的表格。您似乎已将 .validate()
附加到此代码中不存在的表单。此调用将被忽略。
如果它应该是同一个表单并且您修复了#myform
选择器,它仍然无法工作,因为您在同一个表单上调用了两次.validate()
。第二次调用将被忽略。
如果您在 ASP 项目中使用 Unobtrusive Validation 插件,那么您将在同一个表单上调用 .validate()
三次。由 Unobtrusive 插件自动创建的 .validate()
调用将首先被调用,其他调用将被忽略。
jQuery Validate 插件使用.validate()
一次性初始化表单上的插件。如果.validate()
被多次调用,所有后续调用都会被忽略。
拥有 Unobtrusive 的 ASP 用户通常使用 the .setDefaults()
method 来覆盖由 Unobtrusive 创建的任何 jQuery Validate 设置。请记住,这会覆盖页面上所有表单的 jQuery Validate 设置。
【讨论】:
$myform 不错,我没看到。我的菜鸟错误。最后,由于我们最终找到了解决方案,该块已经消失了。稍后我将使用上述解决方案更新我的帖子。 @mdsplat-ta,即使没有 Unobtrusive,您的代码也会在同一个表单上调用.validate()
两次。正如我上面解释的那样,第二个实例......带有onkeyup: false
的那个将被忽略。以上是关于(Jquery Validate) onkeyup: false 适用于一个字段,直到我第二次选择它的主要内容,如果未能解决你的问题,请参考以下文章
jQuery 验证插件未在 form$.validate() 上进行验证