jquery – 防止多个相同值的选择

前端之家收集整理的这篇文章主要介绍了jquery – 防止多个相同值的选择前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个项目,我的表单中有多个’select’输入,所有输入都有相同的选项.我想使用jquery来禁用/隐藏其余“select”输入中的选项(如果已经选中).

例如:

<select id="1">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
</select>

<select id="2">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
</select>@H_502_5@ 
 

用户在第一次选择时选择“Volvo”.我想从第二个选择中删除它.

任何信息,将不胜感激.

解决方法

这里有代码可以继续选择和禁用我们想要的所有时间.

首先是启用每个选项,然后查看选定的值,并禁用与所选值一致的选项.

这两个步骤至关重要,因为如果再次选择,将禁用之前的禁用值.

最新版本

更优雅的方式,我们使用map()(in stackoverflow there is a good explanation about this method)和filter()jquery函数来完成这项工作.减少线条,我认为性能相同或更好.

http://www.jsfiddle.net/dactivo/keDDr/

$("select").change(function()
 {

        $("select option").attr("disabled",""); //enable everything

     //collect the values from selected;
     var  arr = $.map
     (
        $("select option:selected"),function(n)
         {
              return n.value;
          }
      );

    //disable elements
    $("select option").filter(function()
    {

        return $.inArray($(this).val(),arr)>-1; //if value is in the array of selected values
     }).attr("disabled","disabled");   

});@H_502_5@ 
 

新版本

我编辑了我的答案,这是我的最终版本:

http://www.jsfiddle.net/dactivo/kNbWc/

$("select").change(function()
                   {

        $("select option").attr("disabled",""); //enable everything
        DisableOptions(); //disable selected values

                   });


function DisableOptions()
{
    var arr=[];
      $("select option:selected").each(function()
              {
                  arr.push($(this).val());
              });

    $("select option").filter(function()
        {

              return $.inArray($(this).val(),arr)>-1;
   }).attr("disabled","disabled");   

}@H_502_5@ 
 

旧版

http://www.jsfiddle.net/AyxL3/

$("select").change(function()
                   {

        $("select option").attr("disabled",""); //enable everything
        DisableOptions(); //disable selected values

                   });


function DisableOptions()
{

    $("select option").filter(function()
        {
              var bSuccess=false; //will be our flag to know it coincides with selected value
              var selectedEl=$(this);
              $("select option:selected").each(function()
              {

                  if($(this).val()==selectedEl.val())
                  {
                       bSuccess=true; //it coincides we will return true;
                       return false; // this serves to break the each loop
                   }               

              });
              return bSuccess;
   }).attr("disabled","disabled");   

}@H_502_5@

猜你在找的jQuery相关文章