You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jquery Validate设置onkeyup:false后二次选中字段仍触发keyup校验问题

问题根因

异常触发有两个核心原因:

  • 初始校验配置未加onkeyup: false参数:jQuery Validation插件默认规则是字段从未校验过时只在失焦时触发校验,一旦字段完成过一次校验(也就是首次失焦校验后),就会自动开启keyup实时校验,只有初始化校验器时显式传入onkeyup: false才能全局禁用该逻辑。
  • 后续给不存在的#myform调用了validate()方法完全不生效,你的表单id是form1,且validate()方法只能对同一个表单初始化一次,后续调用不会覆盖原有配置,只会返回已存在的校验器实例。

修复方案

直接把onkeyup: false参数加到初始校验配置里即可,修改后的代码如下:

<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 = {
         onkeyup: false, // 新增这一行,全局禁用keyup校验逻辑
         rules: {
            claimNumber: {
                uniqueClaim: true,
                required: true
            }
        }
    };

    var validateForm = function () {
        $('input,select,textarea', 'div.hide').not('input[type=radio]').each(function () {
            $(this).val('');
        });
        // 这里调用validate不会重新初始化,会返回已有的校验器实例,不需要修改
        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那段无效代码
    });
</script>

可选进阶配置

如果你只想给claimNumber这一个字段禁用keyup校验,其他字段保留默认逻辑,可以按下面的方式配置:

var form1ValidationRules = {
     onkeyup: function(element, event) {
        // 只跳过claimNumber字段的keyup校验,其他字段走默认逻辑
        if ($(element).attr('name') === 'claimNumber') {
            return false;
        }
        // 调用默认onkeyup逻辑
        $.validator.defaults.onkeyup.call(this, element, event);
     },
     rules: {
        claimNumber: {
            uniqueClaim: true,
            required: true
        }
    }
};

内容的提问来源于stack exchange,提问作者mdsplat-ta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:57:03