我正在编写一个简单的客户端表单验证代码。我正在尝试创建具有属性的对象&验证过程中使用的值(对于每个单独的输入),然后将它们附加到输入节点。
我正在尝试找到一种方法将这些对象自动配对到各自的输入。在下面的代码中,我找到了一种方法来执行此操作,但是要使用eval()函数,我宁愿避免使用它。在JS中还有其他方法吗?
<label class="c-contact-form__label" for="your_name">Your Name *</label>
<input class="" type="text" name="your_name" maxlength="50" size="30">
var your_name = {
regex: /^([a-z\u00C0-\u02AB,.'´`]{1,}\.?\s?)([a-z\u00C0-\u02AB,.'´`]?\.?\s?)+$/i,
required: true,
invalid: "Your name seems a little bit weird…",
empty: "Please, fill in your name."
};
// From within a function of eventListener:
var Merged = Object.assign(this, eval(this.name)); // Use of eval()
console.log(Merged.invalid); // "Your name seems a little bit weird…",
我正在谷歌搜索解决方案非常努力,我已经阅读了可能的上下文[varName]解决方案,但它似乎不起作用(或者我没有得到它)。
答案 0 :(得分:0)
您可以使用eval()或context [varName]。如果你需要它是全局的,上下文可以是带var,const或let或直接窗口[varName]的变量。
答案 1 :(得分:0)
问题是原始代码包含在IIFE中。因此 - AFAIK - 它不能用括号表示法加入,因为它不存在于全局范围内,并且对象本身没有父符号。
const foo = (() => {
let bar = 'obj';
const obj = {
// not accessible by [var]whatever. AFAIK
whatever: 'bar',
}
console.log([bar].whatever); // undefined
})();
我通过将对象包装到父对象中来解决它:
const foo = (() => {
let bar = 'obj';
const parent = {
//now accessible by parent[bar].
obj: {
whatever: 'bar',
}
}
console.log(parent[bar].whatever); // bar
})();