【问题标题】:How to get multiselect optgroup values based on each label on submit?如何根据提交时的每个标签获取多选 optgroup 值?
【发布时间】:2017-05-29 13:42:58
【问题描述】:

我有一个带有多个 optgroup 的 select 选项。 我想从每个组中选择多个值并在提交时根据标签(optgroup)获取值。

HTML代码是

<table>
 <tr>
  <td>Select</td>
  <td>
   <select multiple="multiple" id="multiGrpSel" ">
     <optgroup label="Indutry Types" id="types">
        <option value="1">Private</option>
        <option value="2">Public</option>
        <option value="3">Govt</option>
     </optgroup>
     <optgroup label="Unit Category" id="unit"> 
      <option value="1">Micro</option> 
      <option value="2">Small</option> 
      <option value="3">Medium</option> 
     </optgroup>
   </select>
  </td>
 </tr>
 <tr><th align="center"> <input type="button" id="submit" class="button" value="Submit"> </th></tr> 
</table>

然后提交

$("#submit").die('click').live('click',function() {

    $('#multiGrpSel').find("option:selected").each(function(){
        //optgroup label
        console.debug('label='+$(this).parent().attr("label"));
        //optgroup id
        console.debug('id='+$(this).parent().attr("id"));

        // values based on each group ??
        id = $(this).parent().attr("id");
        console.debug('value='+$('#'+id).val());
    });


}); 

如果选择了第一个和第二个 optgroup 中的两个选项,我会得到 labelid ,但值会变为空白。

输出:

label=Unit Category
id=unit
value=
label=Unit Category
id=unit
value=
label=Industry Types
id=types
value=
label=Industry Types
id=types
value=

【问题讨论】:

    标签: javascript jquery html multi-select optgroup


    【解决方案1】:

    实际上,您已经可以访问这些选定选项的值,但您实际上是在尝试从 optgroup 而不是从 option 获取值,因为您使用 optgroup's #id 来确定其值,即为什么你总是得到一个空白的值结果。

    查看下面的工作代码:

    $("#submit").click(function (){
      $('#multiGrpSel').find("option:selected").each(function(){
            //optgroup label
            var label = $(this).parent().attr("label");
            //optgroup id
            console.log('id='+$(this).parent().attr("id"));
    
            // values based on each group ??
            id = $(this).parent().attr("id");
            
            
            // gets the value 
            console.log("label: "+label+" value: "+$(this).val())
            
        });
    
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select multiple="multiple" id="multiGrpSel">
         <optgroup label="Indutry Types" id="types">
            <option value="1">Private</option>
            <option value="2">Public</option>
            <option value="3">Govt</option>
         </optgroup>
         <optgroup label="Unit Category" id="unit"> 
          <option value="1">Micro</option> 
          <option value="2">Small</option> 
          <option value="3">Medium</option> 
         </optgroup>
       </select>
    
    <input type="button" id="submit" value="submit"/>

    【讨论】:

      【解决方案2】:

      value(文本值)就是this的文本内容。

      console.debug('value=' + $(this).text());
      

      如果您想要实际值(对应数字),请使用:

      console.debug('value=' + $(this).val());
      

      【讨论】:

        【解决方案3】:

        $("#submit").click(function (){
          $('#multiGrpSel').find("option:selected").each(function(){
                //optgroup label
                var label = $(this).parent().attr("label");
                //optgroup id
                console.log('id='+$(this).parent().attr("id"));
        
                // values based on each group ??
                id = $(this).parent().attr("id");
                
                
                // gets the value 
                console.log("label: "+label+" value: "+$(this).val())
                
            });
        
        
        });
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <select multiple="multiple" id="multiGrpSel">
             <optgroup label="Indutry Types" id="types">
                <option value="1">Private</option>
                <option value="2">Public</option>
                <option value="3">Govt</option>
             </optgroup>
             <optgroup label="Unit Category" id="unit"> 
              <option value="1">Micro</option> 
              <option value="2">Small</option> 
              <option value="3">Medium</option> 
             </optgroup>
           </select>
        
        <input type="button" id="submit" value="submit"/>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多