我试图在其他帖子中找到我的问题的解决方案,但我找不到类似的东西。
我有这个html结构:
<p>title abc</p>
<input name="input_a" ... >
<p>title abc</p>
<input name="input_b" ... >
<p>title abc</p>
<input name="input_c" ... >
...
提交表单我在Ajax中检查所有字段都已正确填写,如果一切正常,它将返回'success',否则它将返回一个包含未验证字段索引的数组。
例如,如果我只填写'input_b',那么我将获得rs_prod = Array(0, '', 2, 3, ...)
我现在要做的只是用与这些值相关的<p>title abc</p>
红色,添加一个类。
因此,我将每个值rs_prod[index]
与index
进行比较:
$.ajax({
...
success: function(rs_prod) {
if (rs_prod == 'success') {
// success case
} else {
$( rs_prod ).each(function( index ) {
if (index == rs_prod[index]) {
$("#add-form p:eq("+index+")").addClass("redText");
} else {
console.log(index); // never returns 0
$("#add-form p:eq("+index+")").removeClass("redText");
}
});
}
}
这实际上对我所得到的所有错误字段都有效:
<p class= "redText">title abc</p>
此时,当我要填写我之前忘记并再次提交的字段时,我应该删除类“redText”:所以它会发生......除了第一个之外它保持班级“redText”的<p>title abc</p>
我无法理解为什么。
我唯一注意到的是console.log(index)
,在上面的代码中,总是返回索引的值,除非该值应为0.似乎以某种方式索引松散值0。
EDIT /溶液
我认为这个问题主要是因为0因为某种原因被认为不是价值而是假的。
这是ajax中用于存储要检查的字段的数组:
$fields_req = array(
0 => 'input1',
1 => 'input2',
2 => 'input3',
3 => 'input4',
...)
我改变了
$fields_req = array(
1 => 'input1',
2 => 'input2',
3 => 'input3',
4 => 'input4',
...)
然后根据@Thomas的建议我替换了
if (index == rs_prod[index]) {
与
if (rs_prod[index]) {
现在可行了
最后编辑:这是我的最终解决方案:
if (rs_prod == 'success') {
// success case
} else {
$("#add-form p").removeClass("redText");
$( rs_prod ).each(function( index ) {
if (rs_prod[index]) {
$("#add-form p:eq("+index+")").addClass("redText");
}
});
答案 0 :(得分:0)
请检查index
的值,看它是否以1 or 0
开头。
如果它以1
开头,则增加index
+ 1 并将其用作循环。
答案 1 :(得分:0)
这是一个可能对您有用的FIDDLE。
它不包含AJAX调用,但代码的概念可以很容易地转移到ajax成功或.done函数。
单击一下,您将读取所有变量并填充数组。
根据输入值的长度(或您可能用于验证的其他标准),输入标签的颜色将更改为红色或蓝色。
我不确定你在使用ajax做了什么,但我确信如果你通过第二次点击更新一个或多个变量,你就可以回想起ajax。
也许通过提供更多信息,我们可以为您提供更多帮助。
JS
var firstarray = [];
$('#clickme').on('click', function(){
$('input').each(function(index){
firstarray[index] = $('input:eq(' + index + ')').val();
console.log(firstarray[index]);
});
console.log( firstarray );
$('p').each(function(index){
if(firstarray[index].length < 1)
{
$('p:eq(' + index + ')' ).css('color', 'red');
}
else
{
$('p:eq(' + index + ')' ).css('color', 'blue');
}
});
});