我正在尝试为多种语言的表单验证创建错误消息。 不幸的是,将“target”参数传递给我的函数不起作用。也许目标被解释为一个字符串?!
function formMessages(field, target) {
var messages = {
'de' : {
'valueMissing': 'Bitte füllen Sie dieses Feld aus.',
'typeMismatch': {
'email': 'Bitte geben Sie eine E-Mail ein.',
'url': 'Bitte geben Sie eine URL ein.'
}
}
};
// Don't work!
// return messages.de.target;
// This works! But it is not dynamic!
// return messages.de.typeMismatch.email;
}
if (validity.typeMismatch) {
// Email
if (field.type === 'email') return formMessages(field, 'typeMismatch.email');
}
答案 0 :(得分:2)
使用 eval 方法
return eval('messages.de.'+target);
答案 1 :(得分:1)
试试这个:
function formMessages(field, target) {
var messages = {
de: {
valueMissing: "Bitte füllen Sie dieses Feld aus.",
typeMismatch: {
email: "Bitte geben Sie eine E-Mail ein.",
url: "Bitte geben Sie eine URL ein."
}
}
};
return target.split(".").reduce((re, v) => re[v], messages.de);
// This works! But it is not dynamic!
// return messages.de.typeMismatch.email;
}
if (validity.typeMismatch) {
// Email
if (field.type === "email") return formMessages(field, "typeMismatch.email");
}
messages.de.target
等于messages['de']['target']
,因此target
可以作为字符串使用。
如果您希望target
作为变量,则应为messages.de[target]
。
但是,在您的情况下,target
为typeMismatch.email
,因此您必须使用reduce
进行累积。
答案 2 :(得分:0)
使用括号表示法访问动态属性
function formMessages(field)
{
var messages = {
'de' : {
'valueMissing': 'Bitte füllen Sie dieses Feld aus.',
'typeMismatch': {
'email': 'Bitte geben Sie eine E-Mail ein.',
'url': 'Bitte geben Sie eine URL ein.'
}
}
};
return messages.de.typeMismatch[ field.type ]; //pass the field.type itself
}
if (validity.typeMismatch)
{
if ( field.type === 'email') return formMessages(field); //pass the field itself
}
答案 3 :(得分:0)
如果您将字符串作为参数传递,则使用[]表示法并将'typeMismatch','email'作为两个单独的参数传递。
function formMessages(field, target1, target2) {
var messages = {
'de' : {
'valueMissing': 'Bitte füllen Sie dieses Feld aus.',
'typeMismatch': {
'email': 'Bitte geben Sie eine E-Mail ein.',
'url': 'Bitte geben Sie eine URL ein.'
}
}
};
return messages.de[target1][target2];
}
if (validity.typeMismatch) {
// Email
if (field.type === 'email') return formMessages(field, 'typeMismatch', 'email');
}