2011-03-25 124 views
0

我目前有一个输入表单。有每个输入级两个项目如下:使用JQuery比较输入字段

<form> 
    <input type="text" name="firstname_a" class="firstname" disabled="disabled" /> 
    <input type="text" name="firstname_b" class="firstname" /> 
    <input type="text" name="surname_a" class="surname" disabled="disabled" /> 
    <input type="text" name="surname_b" class="surname" /> 
    <input type="submit" value="submit" /> 
</form> 

在提交我想jQuery来检查是否不看重比赛值b(值已经由最终用户输入,b值已被输入为审核公司工作的外包工)。该表格最多可以有470个输入字段,这些输入字段根据正在进行的审查类型存储在数据库中。我不这样做,因此,希望有型了470倍!:

if($('input["name=firstname_a"]').val() == $('input["name=firstname_a"]').val()) 
{ 
    // do something 
} 
else 
{ 
    // do something else 
} 

而是我想找到一个动态的方式来做到这一点,可能使用serializeArray()函数,但我挣扎!所有或任何帮助将不胜感激。

回答

4

可以循环通过.each输入在_a结束并执行与其对应_b比较:

$('#target').submit(function() { 

    // Iterate over each input with name ending in _a 
    $('input[name$="_a"]').each(function() { 

     // Get the base name by removing _a 
     var name = $(this).attr('name').replace(/_a$/, ''); 

     // Compare _a to _b 
     if($('input[name="'+name+'_a"]').val() != $('input[name="'+name+'_b"]').val()) { 
      alert(name+" field does not match!"); 
     } 
    }); 

    return false; 
}); 

示例:

http://jsfiddle.net/jtbowden/yqMGG/

这里是所有的不匹配将被保存,并通知了在最后一个版本:

http://jsfiddle.net/jtbowden/amsJj/

或者说突出了错误版本:

http://jsfiddle.net/jtbowden/V8xJX/

+0

真棒!感谢这些例子。代码实际上比我提出的问题稍微复杂一点,但已经设法调整您的建议以适应。我攒了几个小时盯着屏幕,再次感谢! – 2011-03-25 21:43:59

2

我会在集合中使用匹配名称的每个匹配的名称以_a结尾,然后找到相应的_b并检查它们的值。在外部范围中设置一个变量,以跟踪是否找到任何无效输入。

var valid = true; 
$('input[name$="_a"]').each(function() { 
    var $a = $(this); 
    var bName = $a.attr('name').replace(/_a/,'_b'); 
    var $b = $('input#' + bName); 
    if ($a.val() != $b.val()) { 
     // add a validation message for b? 
     valid = false; 
     // return false; // only if you want to stop after the first one 
    } 
}); 

return valid; 
0

您可以使用两端有选择$=并逐一列出假定它们按相同的顺序俩都始终有一个_a值_B值:

var aSet = $('input[name$="_a"]'), 
    bSet = $('input[name$="_b"]'), 
    al = aSet.length; 

for (var i = 0; i < al; i++) { 
    if (aSet.eq(i).val() == bSet.eq(i).val()) { 
    // do something 
    } else { 
    // do something else 
    } 
} 
0

你是否试图同时评估所有元素?如果是这样,在表单提交后,这属于服务器端。如果你是rying每个字段模糊后这样做,则

<input type="hidden" name="firstname_a" class="firstname" /> 
<input type="text" name="firstname_b" class="firstname eval" rel="#firstname_b"/> 
$('.eval').live('blur',function(){ 
    if($(this).val()==$($(this).attr('rel')).val()){ 
    ... 
    }else{ 
    ... 
    } 
}); 

如果你真的想这样做在提交时再

$('.eval').each(function(){ 
     if($(this).val()==$($(this).attr('rel')).val()){ 
     ... 
     }else{ 
     ... 
     } 
    });