使用JQuery比较输入字段

时间:2011-03-25 21:08:34

标签: 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(最终用户输入的值a,由为审查公司工作的外部工作人员输入的值b)。表单最多可包含470个输入字段,这些字段根据正在执行的审查类型存储在数据库中。因此,我不想输出470次!:

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

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

4 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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;

答案 2 :(得分: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
  }
}

答案 3 :(得分:0)

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

<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{
        ...
      }
    });