yii2 Ошибка динамического URL-адреса проверки клиента - Невозможно прочитать свойство 'test' из undefined - PullRequest
0 голосов
/ 10 декабря 2018

Я добавляю поле динамически, используя jquery, а затем динамически добавляю поле в список проверки, как показано в ссылке ( Добавление и удаление полей динамически ).В своем коде я добавляю валидацию 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: Невозможно прочитать свойство 'test' изundefined in yii.validation.js .

Эта ошибка появляется в строке 244:

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

1 Ответ

0 голосов
/ 11 декабря 2018

Это потому, что вам нужно предоставить шаблон, по которому он будет проверять 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 (интернационализированные доменные имена).

, если вы добавляете console.log(options); в начале функции url в файл yii.validation.js, а затем заходите в любую форму, где у вас естьполе 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
            });
        }
    });
}
...