使用JQuery比较输入字段

我目前有一个输入表格。 每个输入类有两个条目,如下所示:

在提交时,我希望JQuery检查值是否匹配值b(最终用户已输入值a,值b已由为审查公司工作的外部工作人员输入)。 表单最多可包含470个输入字段,这些字段根据正在执行的审查类型存储在数据库中。 因此,我不想输出470次!:

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

相反,我想找到一种动态的方法,可能使用serializeArray()函数,但我正在努力! 所有或任何帮助将不胜感激。

你可以循环.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/

我将使用以_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; 

您可以使用带有选择器$=的结尾并迭代列表,假设它们的顺序相同且_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 } } 

你想同时评估所有元素吗? 如果是这样,它在表单提交后属于服务器端。 如果你想在每次场模糊之后做这件事

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

如果你真的想在提交时做这件事

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