【问题标题】:yii2 Error of dynamic client validation URL - Cannot read property 'test' of undefinedyii2 动态客户端验证 URL 错误 - 无法读取未定义的属性“测试”
【发布时间】:2018-12-10 20:41:31
【问题描述】:

我使用 jquery 动态添加一个字段,然后将该字段动态添加到验证列表中,如链接 (Adding and removing fields dynamically) 中所示。在我的代码中,我添加了 url 验证。

function validateDynamicField() {
    $('#serial-form').yiiActiveForm('add', {
        id: 'link-1-link',
        name: 'link-1-link',
        container: '.field-link-1-link',
        input: '#link-1-link',
        error: '.help-block',
        enableAjaxValidation: true,
        validate:  function (attribute, value, messages, deferred, $form) {
            yii.validation.required(value, messages, {
                "message": "Name be blank bug."
            });
            yii.validation.url(value, messages, {
                "message": "Name must be a url."
            });
        }
    });
}

在客户端url验证字段出现错误:

Uncaught TypeError: Cannot read property 'test' of undefined in yii.validation.js.

此错误出现在第 244 行:

if (!valid || !options.pattern.test(value)) {

【问题讨论】:

    标签: php jquery yii2 yii2-validation


    【解决方案1】:

    那是因为您需要提供验证 URL 所依据的模式,因为您将 validation.url 称为您应该传递的完整选项

    {
        "pattern": /^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])/i,
        "message": "Name must be a url.",
        "enableIDN": false,
        "skipOnEmpty": 1
    }
    

    enableIDN:验证过程是否应考虑IDN(国际化域名)。

    如果您在文件yii.validation.js 中的函数url 的开头添加console.log(options);,然后进入任何通常添加了URL 字段的表单,并且在模型中使用规则作为url,例如,如果模型中有website 字段,则规则应类似于[['website'],'url'],然后按下带有空输入的提交按钮,您将看到console.log(options) 输出与上面相同,这些输出通过核心验证器规则进行调整。

    所以把你的代码改成

    function validateDynamicField() {
        $('#my-form').yiiActiveForm('add', {
            id: 'link',
            name: 'link',
            container: '.field-link',
            input: '#link',
            error: '.help-block',
            enableAjaxValidation: true,
            validate:  function (attribute, value, messages, deferred, $form) {
                yii.validation.required(value, messages, {
                    "message": "Name be blank bug."
                });
                yii.validation.url(value, messages, {
                    "pattern": /^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])/i,
                    "message": "Name must be a url.",
                    "enableIDN": false,
                    "skipOnEmpty": 1
                });
            }
        });
    }
    

    【讨论】:

    • 非常感谢您的详细解答。你帮了我很多。感谢您编辑问题。
    • 没问题@Pavel,我们都在这里互相帮助,很高兴它帮助了你。很高兴。
    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多