有一个用jQuery制作的左右选择框
想要实现的效果,
点左边的的添加到右边
需要判断右边是否已有要添加的选项,有的话不添加,没有的话添加。

解决方案 »

  1.   

    http://blog.csdn.net/gkw521/archive/2009/10/10/4651880.aspx
    是这个吗?
      

  2.   

    楼主,给你一个函数。应该可以帮你解决这个问题:/**
     * 合并数组,并去掉重复的元素
     * @param {Object} arr
     * @param {Object} t : true,进行数组排序,false:不排序
     */
    function uniqueArray(arr, t){
        with (arr) 
        return !t ? join(",").match(/([^,]+)(?!.*\1)/ig) : reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse();
    }
    1、把你点击的左面的数据放在一个array数组里面,右面的也放在一个数组里面。
    2、然后清空你右面的所有数据
    3、利用函数uniqueArray(arr, t)去掉数组里面重复的选项
    4、填充右面的数据=== 结贴,给分 ===
    得到满意的答案,立即结贴给分,是一种良好的习惯和美德
      

  3.   

    /**
    *
    *@author: develop_design_level
    *@date: 2009-11-05
    * 去掉数组中的重复元素,并且根据第二个参数可以反转原有数组
    * @param: arr 需要去重的数组
    * @param: t :false or 忽略,不反转原有数组; true,反转原有数组
    * 例子:
    *
    * var tempA = ['a','a',2,3,3,3,54,5,76,5];
    * var _arr = uniqueArray(tempA,true);
    * alert(tempA + '\r' +_arr);
    *
    */
      

  4.   

     I'M SO SO SORRY!大家说的思路我都知道,关键是不知道代码怎么写。jQuery代码$("#waitPerson").dblclick(function(){ 
      if ($("#alreadPerson").children().length >4)
      {
        alert ("最多只能添加5项");
        return false;
      }
      for(var i=0; i<$("#alreadPerson").children().length; i++) //关键是这里怎么写,如何循环判断?
      {
        if($("#alreadPerson").val(i)==$("#waitPerson").val())//如何比较?如何判断该项已被选择!
        {   
          alert ("该选项已经被选择"); //给出结果
          return false;
        }
      }
      $("#waitPerson option:selected").clone().appendTo("#alreadPerson"); 
    });   
    选择框代码:   <div id="container"> 
            <div> 
                <span>人员选择</span> 
                <div id="left"> 
                    <span>左边项</span> 
                    <select id="waitPerson" multiple="multiple"> 
                        <option>人员一</option> 
                        <option>人员二</option> 
                        <option>人员三</option> 
                        <option>人员四</option> 
                        <option>人员五</option> 
                        <option>人员六</option> 
                    </select> 
                </div> 
                <div id="btns" style="border:none"> 
                    <input id="moveToRight" type="button" value="添加" /> 
                    <input id="moveToLeft" type="button" value="删除" /> 
                </div> 
                <div id="right"> 
                    <span>右边项</span> 
                    <select id="alreadPerson" multiple="multiple"> 
                    </select> 
                </div> 
            </div> 
         </div> 
      

  5.   

    http://www.taody.com/1.html就差重复添加的判断了,代码我也是网上找的!
      

  6.   

    右移动前执行下面的代码~
    $("#waitPerson option:selected").each(function(){
    var waitObj=this;
    $("#alreadPerson").children().each(function(){
    waitObj.value==this.value&&$(waitObj).removeAttr("selected");
    });
    });
      

  7.   

    不行啊!
    把这个代码放到$("#waitPerson option:selected").clone().appendTo("#alreadPerson"); 
    前面后就只有第一次选择后能添加,第二次第三次就不行了,
      

  8.   


    function addItem(objForm)
    {
      var valueAry=new Array();
      var textAry=new Array();
      var leftElement=objForm.elements["userId"];
      var rightElement=objForm.elements["nowid"];
      
      var leader=objForm.elements["leader"];
      
      var count=0;
      var i,j,k,flag;
      for(i=0;i<leftElement.options.length;i++)
      {
       if(leftElement.options[i].selected)
       {valueAry[count]=leftElement.options[i].value;
        textAry[count]=leftElement.options[i].text;
        count++;
       }
      }
      var count1=rightElement.options.length;
      count1=count1>0?count1:0;
      for(j=0;j<count;j++)
      {
       flag=false;
       for(k=0;k<count1;k++)
       {
        if(rightElement.options[k].text==textAry[j])
        flag=true;
       }
       if(!flag)
      {
        rightElement.options[count1]=new Option(textAry[j],valueAry[j]);
        rightElement.options[count1].selected=true;
        leader.options[count1]=new Option(textAry[j],valueAry[j]);
        count1++;
        }
      }
    }function subItem(objForm)
    {
      var i;
      var objElement=objForm.elements["nowid"];
      var objElement2=objForm.elements["leader"];
      for(i=objElement.options.length-1;i>=0;i--)
      {
       if(objElement.options[i].selected)
        objElement.options[i]=objElement2.options[i]=null;
        
       // objElement2.options[objElement.options.length-1]=null;
      }
    }function addAllItem(objForm)
    {
      var i;
      var leftElement=objForm.elements["userId"];
      for(i=0;i<leftElement.options.length;i++)
      {
       leftElement.options[i].selected=true;
      }
      addItem(objForm);
    }
    function subAllItem(objForm)
    {
      var i;
      var rightElement=objForm.elements["nowid"];
     // for(i=0;i<rightElement.options.length;i++)
      for(i=rightElement.options.length-1;i>=0;i--)
      rightElement.options[i].selected=true;
      subItem(objForm);
    }