将数组值与每个()jquery中的索引值进行比较

时间:2014-09-11 01:09:13

标签: javascript jquery

我试图在其他帖子中找到我的问题的解决方案,但我找不到类似的东西。

我有这个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");
     } 
});

2 个答案:

答案 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');               
                      }
    });
});