使用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/
或者突出显示错误的版本:
我将使用以_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{ ... } });