Javascript 循环遍历对象以查找输入名称
我有两个类似的输入:Javascript 循环遍历对象以查找输入名称,javascript,jquery,Javascript,Jquery,我有两个类似的输入: <input name="education[1][yearbegin]" type="date" class="form-control"> <input name="education[2][yearbegin]" type="date" class="form-control"> 我并不总是得到多于1的返回,有时可能会有很多,我试图循环向输入添加错误,如下所示: var errors = $.parseJSON(data.responseTe
<input name="education[1][yearbegin]" type="date" class="form-control">
<input name="education[2][yearbegin]" type="date" class="form-control">
我并不总是得到多于1的返回,有时可能会有很多,我试图循环向输入添加错误,如下所示:
var errors = $.parseJSON(data.responseText);
alertHtml += '<ul>';
$.each(errors, function (key, value) {
$('.form-control[name=' + key + ']').closest('.form-group').addClass('has-error');
alertHtml += '<li>' + value + '</li>';
});
alertHtml += "</ul>";
而不是
education[1]yearbegin
我的输入不会总是排列的,但是那些没有附加的输入我如何通过更改javascript将错误消息附加到输入中?json由Laravel的数组验证发回。不幸的是,服务器以一种形式接受名称,但以另一种形式发回 如果我们假设点语法应始终转换为方括号语法,则更新键相当简单:
var updated = key.split(".");
if (updated.length == 1) {
updated = updated[0];
} else {
updated = updated[0] + "[" + updated.slice(1).join("][") + "]";
}
对于多部分键,在第二部分之前插入[
,在第二部分和第三部分、第三部分和第四部分之间插入[
,以此类推;并在末尾添加]
例如:
var错误=[
{“education.1.yearbegin”:[“education.1.yearbegin字段为必填项],
{“education.2.yearbegin”:[“education.2.yearbegin字段是必需的。”]}
];
errors.forEach(函数(错误){
Object.keys(错误).forEach(函数(键){
var updated=键拆分(“.”);
if(updated.length==1){
已更新=已更新[0];
}否则{
updated=updated[0]+“[”+updated.slice(1).join(“][”+“]);
}
控制台日志(“原始:“+key+”,更新:“+updated”);
});
});代码>名称为的第一个问题:
我只想把名字改成更容易阅读的名字,而不是像这样:
name="education[1][yearbegin]"
也许你会喜欢:
name="EducationYearBegin1"
第二期:
您可以检查属性是否为数组,如下所示:
if (value instanceof Array) {
value.forEach(function (item) {
alertHtml += '<li>' + item + '</li>';
})
} else {
alertHtml += '<li>' + value + '</li>';
}
if(数组的值实例){
value.forEach(函数(项){
alertHtml+=''+item+' ';
})
}否则{
alertHtml+=''+value+' ';
}
也许是那样的
如果您的数组中也有多个错误,foreach将为您提供保护。您可以使用它将教育。1.yearbegin
转换为教育[1][yearbegin]
请参阅此代码中的fixName
函数
函数fixName(名称){
var newName=name.replace(/\.\d\./,函数($1){
返回“[”+$1.replace(/\./g,”)+“]
}).replace(/\].+/,函数($1){
返回$1。替换(/\]/,“][”+“]”)
});
返回newName;
}
var errors=[{“education.1.yearbegin”:[“education.1.yearbegin字段是必需的。”]},
{“education.2.yearbegin”:[“education.2.yearbegin字段是必需的。”]}];//$。parseJSON(data.responseText);
var alertHtml=document.querySelector(“警报”);
alertHtml.innerHTML+='';
$。每个(错误、功能(键、obj){
var realKey=fixName(Object.keys(obj)[0]);
$('.form控件[name=“'+realKey+''“]).addClass('has-error');
alertHtml.innerHTML+='- '+obj[Object.keys(obj)[0]][0]+'
';
});
alertHtml.innerHTML+=“
”代码>
。有错误{
颜色:红色;
}
李{
颜色:绿色
}
我认为您有两个问题,对吗。1:名称不正确?2:如果是数组,你需要正确地追加错误?没错,@JamesDale,而不是[1]它是。1.根据这一建议,输入将不再是数组,无法像数组服务器端那样访问。是的,请使用下面的答案:)当我控制台记录我的错误时,我似乎无法实现这一点,我得到了以下对象,并且出现了一个错误:@randomman:您正在使用单个对象作为起点。上面使用了一个数组,因为你在问题中清楚地引用了你得到的不止一个数组。请参阅我对问题的评论以及答案中的示例。很抱歉,我已使用收到的格式更新了我的OP,@randomman:然后您只需删除最外层的$。每个。我已经更新了答案。
name="EducationYearBegin1"
if (value instanceof Array) {
value.forEach(function (item) {
alertHtml += '<li>' + item + '</li>';
})
} else {
alertHtml += '<li>' + value + '</li>';
}