使用jquery验证多个文本框

时间:2009-09-07 14:45:48

标签: jquery validation

如果我有多个文本框,这些文本框具有不同的ID,但所有id都以“pics”开头,前面有一个数字。这样:

textbox1  id = 'pics1' value='test1'
textbox2  id = 'pics2' value='test2'
textbox3  id = 'pics3' value='test1'
...
submit

我想做一些验证,当用户点击提交时...文本框中没有两个相同的值。对于上面的示例,验证将导致错误,并且表单不会提交。因为pics1和pics3具有相同的值。

5 个答案:

答案 0 :(得分:2)

一种解决方案(未经测试):

function validate() {

   var isValid = true;

   $("input:text[id^=pics]").each(function() {
      if ($("input:text[id^=pics][value=" + $(this).val() + "]").length > 1)
        isValid = false;
      });

   return isValid;
}

答案 1 :(得分:1)

这适用于您拥有的许多文字输入

function validate()  {
  var inputs = $('input:text[id^="pics"]');
  var values = $.map(inputs, function(n, i) {
      return n.value;
  });

  values = unique(values);

  return values.length === inputs.length;
}

function unique(arr) {
  var r = [];
  o:for(var i = 0, n = arr.length; i < n; i++) {
    for(var x = i + 1 ; x < n; x++) {
       if(arr[x]==arr[i]) continue o;
    }
    r[r.length] = arr[i];
  }
  return r;
}

答案 2 :(得分:1)

我必须突出显示包含相同值(选定值)的下拉框(选择元素)。

所以我改变了一些事情。

function validate()  {
  var inputs = $('select[id^="select_style"]');
  var values = $.map(inputs, function(n, i) {
      if(n!=undefined)
      return n.value+'-'+n.id;
  });

   values = unique(values);

   for(si=0;si< values.length;si++)
    {
    jQuery('#'+values[si]).css('background-color','#ff0000')
     }


}

//我改变了一些独特的函数,现在它将返回一个包含

的id的数组

//包含相同值的元素

function unique(arr) 
{
        //arr contains array of  value1-id1,value2-id2,value3-id3....    
    var arrId=new Array();
    var arr1=new Array();
    var dIdArr=new Array();//dIdArr  array containing ids of elements which contains 
                               //duplicate values

  for(j=0;j< arr.length;j++)
     {
      var sa=arr[j].split('-');
         arr1[j]=sa[0]; 
         arrId[j]=sa[1];
      }
  var r = [],l=0;

  o:for(var i = 0, n = arr.length; i < n; i++) 
{
    for(var x = i + 1 ; x < n; x++)
 {
       if(arr1[x]==arr1[i])
         {
if(jQuery.inArray(arrId[x],dIdArr)==-1)//not found in the array 
                                       //then assign in the array
             { 
dIdArr[l]=arrId[x];
                 l++;
                  if(jQuery.inArray(arrId[i],dIdArr)==-1)
                  {
                 dIdArr[l]= arrId[i];l++;}
                 }
                 else if(jQuery.inArray(arrId[i],dIdArr)==-1){
                      dIdArr[l]=arrId[i];
                      l++;
                     } 
         continue o;
         }
    }
    r[r.length] = arr1[i];
  }
return dIdArr;

}

答案 3 :(得分:0)

试试这个:

<script>
function validate()
{
    var areas = document.getElementsByTag('textarea');
    for (var i=0; i<areas.count;i++)
        for (var j=i+1; j<areas.count;i++)
            if (areas[i].id.startsWith('pics') && areas[i].id.startsWith('pics') && areas[i].value == areas[j].value)
                return false;
    return true
}
</script>

<form onsubmit="return validate();">
    <textarea id = 'pics1'></textarea>
    <textarea id = 'pics2'></textarea>
    <textarea id = 'pics3'></textarea>
    <input type="submit" />
</form>

答案 4 :(得分:0)

<form onsubmit="return validate()" >
<input type="text" id="pics1" value="test1" />
<input type="text" id="pics2" value="test2" />
<input type="text" id="pics3" value="test3" />
<input type="submit" />
<br/><label id="error" />
</form>
<script>
function validate(){
    var inputs=document.getElementsByTagName("input");
    var pics1_temp,pics3_temp;
    for (var i=0;i<inputs.length;i++){
        if(inputs[i].id.indexOf("pics")>-1)
        {
            if(inputs[i].id=="pics1")
                pics1_temp=inputs[i].value;
            else if(inputs[i].id=="pics3")
                pics3_temp=inputs[i].value;
        }
    }

    if(pics1_temp!=pics3_temp)
    {
        document.getElementById("error").innerHTML="Pic1 must match with pic3";
        return false;
    }
    else return true;
}
</script>