我使用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
});
}
});
}