yii2 动态客户端验证错误 URL - 无法读取未定义的 属性 'test'
yii2 Error of dynamic client validation URL - Cannot read property 'test' of undefined
我使用 jquery 动态添加一个字段,然后将该字段动态添加到验证列表中,如 link (Adding and removing fields dynamically) 中所示。在我的代码中,我添加了 url validation.
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)) {
这是因为您需要提供验证 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
});
}
});
}
我使用 jquery 动态添加一个字段,然后将该字段动态添加到验证列表中,如 link (Adding and removing fields dynamically) 中所示。在我的代码中,我添加了 url validation.
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)) {
这是因为您需要提供验证 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
});
}
});
}