yii2 动态客户端验证 URL 错误 - 无法读取未定义的属性'test'



我使用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验证出现错误的字段:

未捕获类型错误:无法读取yii.validation.js.中未定义的属性"test">

此错误出现在第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
});
}
});
}

相关内容