【问题标题】:jQuery Validate Plugin - Display minlength "Characters to go" in error messagejQuery Validate Plugin - 在错误消息中显示 minlength "Characters to go"
【发布时间】:2013-03-08 19:43:35
【问题描述】:

我正在使用jQuery Validate Plugin 来验证我网站上的表单。我想更改默认的 minlength 消息以显示字段中仍需要的字符数,并让此数字随着用户在 input 字段中的输入而更改。

例如,如果 minlength 规则为 15 个字符,并且字段中有 2 个字符,则错误消息将显示为 "Please enter at least 13 more characters."

为了简单起见,这是我的 jQuery。 下面的所有代码放在一起时都不能正常工作,所以我需要一个可以正常工作的解决方案

这是小提琴:http://jsfiddle.net/ac2T2/1/

这是我的代码:

$('#contactForm').validate({
    rules: {
        contactName: {
            minlength: 15
        }
    }
});

我想添加一些执行以下操作的代码:

var numOfCharactersToGo = 15 - parseInt($('contactName').val().length);

然后理论上我可以更改minlength 的默认 jQuery 消息,如下所示:

jQuery.extend(jQuery.validator.messages, {
    minlength: jQuery.validator.format('Please enter at least ' + numOfCharactersToGo + ' more characters.')
});

【问题讨论】:

  • 那么问题/问题是什么?
  • 我上面所做的不起作用。
  • 您介意为您的代码编写一个快速的 jsfiddle 吗?
  • 为问题添加了小提琴。

标签: jquery jquery-validate validation


【解决方案1】:

感谢@Sparky 的回答将我引向正确的方向,这是最终答案,以防其他人想要相同的功能。

这是小提琴:http://jsfiddle.net/ZhRGA/8/

HTML

<form id="myform">
    <input type="text" name="field1" id="field1" />
    <br/>
    <input type="submit" />
</form>

jQuery

$(document).ready(function () {
var minChar = 15;
    $('#myform').validate({ // initialize the plugin
        rules: {
            field1: {
                required: true,
                minlength: minChar
            }
        },
        messages: {
            field1: {
                minlength: function () {
                    return [
                        (minChar - parseInt($('#field1').val().length)) +
                        ' more characters to go.'];

                }
            }
        }
    });
});

【讨论】:

    【解决方案2】:

    在表单上初始化插件后,您不能动态更改rulesmessages,除非使用内置方法进行此类更改。

    我知道只有一种方法可以在初始化后动态地覆盖任何规则和消息。那是the rules('add') method

    $('#field').on('keyup', function () {  
        current = 15 - parseInt($(this).val().length);
        $(this).rules('add', {
            minlength: 15,
            messages: {
                minlength: current + " characters to go"
            }
        });
    });
    

    您需要在 keyup 事件处理函数或您用于动态计算字符的任何函数中调用上述内容。该演示很粗糙,有一些问题需要克服,但它表明它可能是可能的。

    非常粗略的 DEMO:http://jsfiddle.net/ZhRGA/5/

    【讨论】:

    • 这似乎有效 - 我将它添加到这个小提琴中:jsfiddle.net/ac2T2/1 但是当它达到 8 个字符时,它会因为某种原因消失吗?想法?
    • @AdamD,就像我说的,它有一些问题。该方法从未用于此目的。但在这种情况下,这似乎是我的逻辑/数学......就像你从当前规则中减去剩余长度一样。它总是在中途失败。
    • @AdamD,我在方法上方声明了它。
    • 我看到了。糟糕......所以它无法按我的预期工作?我觉得这很接近
    • @AdamD,考虑一下...我们正在更改规则本身...当计数器达到 8 时,字段中已经有 8 个字符并且满足规则。我尝试使用相同的方法来更改 message 而不是规则,但这根本不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多