【问题标题】:How to check if an option is selected?如何检查一个选项是否被选中?
【发布时间】:2012-04-30 02:44:30
【问题描述】:
$('#mySelectBox option').each(function() {
    if ($(this).isChecked())
       alert('this option is selected');
     else
       alert('this is not');
});

显然,isChecked 不起作用。所以我的问题是这样做的正确方法是什么? 谢谢。

【问题讨论】:

  • 00zebra00,感谢您在以下众多选项中找到答案。但是,请务必注意以下 cmets 中有关访问所选物业的“最佳”方式的对话。一般的要点是,当您可以直接在 javascript 中访问一个元素(使用 this.selected)时,您应该使用 jQuery($(this).prop("selected"))绕过,但它们都为你工作。

标签: jquery html-select


【解决方案1】:
var selectedOption = $("option:selected", #selectIdentifier)

<select id="selectIdentifier">
<option>1</option>
<option>2</option>
<option selected="selected">3</option>
</select>

编辑:这个答案是有效的,并且避免了 jQuery 的宗教战争。这个答案的关键是:selected。要回答实际问题,OP 需要在选项之间创建一些区别,以便能够查询天气,选择了特定选项。例如选项本身的 id、data-、value 等装饰。

【讨论】:

    【解决方案2】:

    如果您想通过 javascript 检查所选选项

    最简单的方法是在该标签中添加 onchange 属性并在 js 文件中定义一个函数 如果您的 html 文件有类似这样的选项,请查看示例

     <select onchange="subjects(this.value)">
                   <option>Select subject</option>
                   <option value="Computer science">Computer science</option>
                   <option value="Information Technolgy">Information Technolgy</option>
                   <option value="Electronic Engineering">Electronic Engineering</option>
                   <option value="Electrical Engineering">Electrical Engineering</option>
     </select>
    

    现在在js文件中添加函数

    function subjects(str){
        console.log(`selected option is ${str}`);
    }
    

    如果您想检查 php 文件中的选定选项

    只需在标签中提供 name 属性并访问它 php 文件全局变量 /array ($_GET 或 $_POST) 如果您的 html 文件是这样的,请查看示例

    <form action="validation.php" method="POST">
                 Subject:<br>
                <select name="subject">
                   <option>Select subject</option>
                   <option value="Computer science">Computer science</option>
                   <option value="Information Technolgy">Information Technolgy</option>
                   <option value="Electronic Engineering">Electronic Engineering</option>
                   <option value="Electrical Engineering">Electrical Engineering</option>
                </select><br>
    
             </form>
    

    在你的php文件validation.php中你可以这样访问

    $subject = $_POST['subject'];
    echo "selected option is $subject";
    

    【讨论】:

      【解决方案3】:

      如果您需要检查特定值的选项选择状态:

      $('#selectorId option[value=YOUR_VALUE]:selected')
      

      【讨论】:

        【解决方案4】:

        你可以通过 jquery 使用这种方式:

        $(document).ready(function(){
         $('#panel_master_user_job').change(function () {
         var job =  $('#panel_master_user_job').val();
         alert(job);
        })
        })
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <select name="job" id="panel_master_user_job" class="form-control">
                                            <option value="master">Master</option>
                                            <option value="user">User</option>
                                            <option value="admin">Admin</option>
                                            <option value="custom">Custom</option>
                                        </select>

        【讨论】:

          【解决方案5】:

          将此作为您的选择列表:

          <select onchange="var optionVal = $(this).find(':selected').val(); doSomething(optionVal)">
          
                                          <option value="mostSeen">Most Seen</option>
                                          <option value="newst">Newest</option>
                                          <option value="mostSell">Most Sell</option>
                                          <option value="mostCheap">Most Cheap</option>
                                          <option value="mostExpensive">Most Expensive</option>
          
                                      </select>
          

          然后你像这样检查选定的选项:

          function doSomething(param) {
          
              if ($(param.selected)) {
                  alert(param + ' is selected!');
              }
          
          }
          

          【讨论】:

            【解决方案6】:

            如果你只想检查一个选项是否被选中,那么你不需要遍历所有选项。做吧

            if($('#mySelectBox').val()){
                // do something
            } else {
                // do something else
            }
            

            注意:如果您希望选择 value=0 的选项,则需要将 if-condition 更改为 $('#mySelectBox').val() != null

            【讨论】:

              【解决方案7】:

              就我而言,我不知道为什么 selected 总是正确的。所以我能想到的唯一方法是:

              var optionSelected = false;
              $( '#select_element option' ).each( function( i, el ) {
                  var optionHTMLStr = el.outerHTML;
              
                  if ( optionHTMLStr.indexOf( 'selected' ) > 0 ) {
                      optionSelected = true;
                      return false;
                  }
              });
              

              【讨论】:

                【解决方案8】:

                更新

                选择选项的更直接的 jQuery 方法是:

                var selected_option = $('#mySelectBox option:selected');
                

                回答问题.is(':selected')就是你要找的:

                $('#mySelectBox option').each(function() {
                    if($(this).is(':selected')) ...
                

                非 jQuery(可以说是最佳实践)的方法是:

                $('#mySelectBox option').each(function() {
                    if(this.selected) ...
                

                不过,如果您只是在寻找选定的值,请尝试:

                $('#mySelectBox').val()
                

                如果您正在查找所选值的文本,请执行以下操作:

                $('#mySelectBox option').filter(':selected').text();
                

                查看:http://api.jquery.com/selected-selector/

                下次寻找重复的 SO 问题:

                Get current selected option 要么 Set selected option 要么 How to get $(this) selected option in jQuery? 要么 option[selected=true] doesn't work

                【讨论】:

                • 它无缘无故地使用 jQuery。使用本机 js DOM 属性。看看this
                • 您似乎没有阅读我的回答。 this.selected 可以用来代替$(this).is(":selected") 我想这不需要jsperf,对吧?我不反对使用 jQuery!,但在需要时使用它,而不是在它只提供开销和更多代码时使用它。
                • @gdoron this.selected 是完全有效的,但他要求使用正确的 jQuery 方法来做到这一点。
                • @gdoron 我完全同意你的看法。 也许我们这些从小接触 jQuery 的人需要学习 JavaScript 课程。 :)
                • @gmoron 不,我的问题被否决和投赞成票。不过侦探工作不错。
                【解决方案9】:

                您可以通过这种方式获得选定的选项:

                $('#mySelectBox option:selected')...
                

                LIVE DEMO

                但如果您想迭代所有选项,请使用 this.selected 而不是 this.isChecked,后者不存在:

                $('#mySelectBox option').each(function() {
                    if (this.selected)
                       alert('this option is selected');
                     else
                       alert('this is not');
                });
                

                LIVE DEMO

                更新:

                你有很多答案建议你使用这个:

                $(this).is(':selected') 好吧,使用this.selected 可以更快更轻松地完成,那么为什么要使用它而不是原生 DOM 元素方法呢?!

                阅读jQuerytag info中的了解你的DOM属性和函数

                【讨论】:

                • @downvoter,想发表评论吗?走出阴影并战斗! :)
                • 可能是因为您没有回答问题但给出了最佳实践。 ;)
                • @iambriansreed。哈?!我没有回答问题? 问题的哪一部分仍未得到解答?
                • 这里有有趣的讨论。 :) 不知道为什么是所有的 DV,但我对所有使用过this.selected 的人进行了紫外线处理。我同意你们关于 jQuery 过度使用/滥用的观点。了解 jQuery 的一部分,就是知道何时 使用它。也就是说,请记住 ':selected' 选择器是一个自定义的 Sizzle 选择器,因此使用它会禁用 querySelectorAll 在支持的浏览器中的使用。这当然不是世界末日,因为它提供了一些不错的短代码,但我个人倾向于避免使用 Sizzle-only 的东西。
                • @gdoron 当你在 Meta 中指出这个问题时,我很感兴趣。关于DV,this node可能对你有用。
                【解决方案10】:

                如果您对is() 不熟悉或不熟悉,您可以检查prop("selected") 的值。

                As seen here

                $('#mySelectBox option').each(function() {
                    if ($(this).prop("selected") == true) {
                       // do something
                    } else {
                       // do something
                    }
                });​
                

                编辑

                正如@gdoron 在 cmets 中指出的那样,访问选项的 selected 属性的更快和最合适的方法是通过 DOM 选择器。这是显示此操作的小提琴update

                if (this.selected == true) {
                

                似乎也能正常工作!谢谢gdoron。

                【讨论】:

                • 你能解释一下他为什么要用$(this).prop("selected")而不是this.selected吗?!它给了你什么??! p.s.我不是反对者……
                • @gdoron,我想到的主要优点是熟悉。我不确定is 的最佳用途是什么,但我喜欢通过 prop 和 attr 访问我的属性。在大多数情况下,这很可能只是口味问题。是的,有一股奇怪的投反对票!
                • 我建议阅读jQuerytag info了解你的DOM 属性和函数部分。没有理由使用较慢的代码+更多的代码来做简单的事情。 .is() 应该用于复杂的选择器,例如 $(...).is('.foo &gt; [name="aaa"] input') or for properties that are not native DOM elements properties like $(...).is(":visiable")。
                • @gdoron;非常感谢您指出这一点。我已经相应地更新了我的答案。
                • 没有问题。如果您认为我的回答比其他人更好,您可以投票赞成。 (我不希望$(this).is(':selected') 的答案被接受。应该使用 Stackoverflow 来学习最佳实践,而不是常见错误...)
                【解决方案11】:

                使用

                 $("#mySelectBox option:selected");
                

                测试它是否是一个特定的选项myoption:

                 if($("#mySelectBox option:selected").text() == myoption){
                          //...
                 }
                

                【讨论】:

                • 没有对你投反对票(这里有一个连续的反对票!)但是myoption是什么???
                • 只是一个字符串,它应该是一个示例选项,OP 要测试它是否被选中
                • 关于downvote,您可能想阅读my answer下的cmets。
                猜你喜欢
                • 2015-10-02
                • 2015-08-30
                • 2019-01-12
                • 1970-01-01
                相关资源
                最近更新 更多