如何使 <select> 的第一个选项不使用 jquery 向上移动? [关闭]

Posted

技术标签:

【中文标题】如何使 <select> 的第一个选项不使用 jquery 向上移动? [关闭]【英文标题】:How to make the first option of <select> not move up down with jquery? [closed] 【发布时间】:2022-01-19 15:02:40 【问题描述】:

我有一个选择列表,我想让第一个选项(值)不可选择,并且在单击这样的按钮时无法上下移动:

值应始终在顶部

When Author is selected and pressing the up button no changes should be made. value 选项必须仍然在顶部。

<select name="Select" title="Dropdown List" size="26" multiple="true" style="width:300" class="defaultDropdownListStyle">
  <option title="Value" value="Value" selected="true" disabled=""> Value </option>
  <option title="Author" value="Author"> Author </option>
  <option title="Title" value="Title"> Title </option>
</select>

如何使用 jquery 来实现?谢谢

编辑: 按钮功能

function btnUp()
    
       var index = columns.elements[listbox].selectedIndex;
       var optsSelected = columns.elements[listbox].options;
       var hidden = columns.elements[hidden];
       if (index > 0)
       
          itemsMove(index, index - 1, optsSelected);
          updateHid(hidden, optsSelected);
       


   function btnDown()
        
           var index = columns.elements[glistbox].selectedIndex;
           var selectedOptions = columns.elements[listbox].options;
           var selectedHidden = columns.elements[hidden];
           if (index >= 0 && index < optsSelected.length - 1)
           
              itemsMove(index, index + 1, optsSelected);
              updateHid(hidden, optsSelected);
           
    


function itemsMove(fromIndex, toIndex, options)

   if (fromIndex != toIndex)
   
         var option = options[fromIndex];
         options.remove(fromIndex);
         options.add(option, toIndex);
      
      else
      
         var nLength = options.length;
         var arrOptions = new Array(nLength);
         for (var i=0; i < nLength; i++)
         
            arrOptions[i] = options[0];
            options[0] = null;
         
         var option = arrOptions[fromIndex];
         if (toIndex < fromIndex)
         
            for (var i = fromIndex; i > toIndex; i--)
            
               arrOptions[i] = arrOptions[i-1];
            
         
         else
         
            for (var i = fromIndex; i < toIndex; i++)
            
               arrOptions[i] = arrOptions[i+1];
            
         
         arrOptions[toIndex] = option;
         for (var i=0; i < nLength; i++)
         
            options[i] = arrOptions[i];
         
      
   

【问题讨论】:

我们需要查看单击向上和向下按钮时运行的代码以调试问题。 完全取决于这些按钮是如何实现的;它们不是标准select 的一部分。这可能是一个简单的例子,检查 index==0(顶部条目)更改为 index==1(第二个条目)。 in btnUp: if (index &gt; 0) -> if (index &gt; 1) 和同样的btnDown -> if (index &gt;= 1 【参考方案1】:

没有看到你正在使用的代码,真的很难判断你需要做什么。

不过,为了重写此部分,您需要获取选择字段中的选项,然后以某种方式重写它们。

因此,您可以尝试的一件事是拆分选项并排除第一个索引,以便您只触及非空选项。然后替换他们的订单。

这是我所说的非常粗暴的版本。如果这不是您想要的,请告诉我,如果您可以包含 minimal reproducible example,那就太好了!

$(document).ready(function() 
  let nullOption;
  let options = [];
  $('#forecastSelect option').each(function( index ) 
    if (index > 0) 
      options.push(this)
      this.remove();
     else 
      nullOption = this
    
  );
  
  options = options.reverse();
  
  options.forEach((option) => 
    $('#forecastSelect').append(option);
  );
  
  console.log(nullOption);
  console.log(options);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="forecastSelect" name="forecastSelect" title="Dropdown List" size="26" multiple="true" style="width:300" class="defaultDropdownListStyle">
  <option title="Value" value="Value" selected="true" disabled=""> Value </option>
  <option title="Author" value="Author"> Author </option>
  <option title="Title" value="Title"> Title </option>
</select>

【讨论】:

以上是关于如何使 <select> 的第一个选项不使用 jquery 向上移动? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

<select> 仅显示所选选项的第一个字符

两个浏览器选项卡中的相同 Vue.js 组件使 <select> 镜像其选定值

使用jquery设置选择的第一个选项值[重复]

JQuery刷新选择框

如何根据html vue js中的select选项添加行?

将第一个 <select> 选项设置为选中