如何检查一个选项是不是被选中?

Posted

技术标签:

【中文标题】如何检查一个选项是不是被选中?【英文标题】: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 Get Selected Option From Dropdown的可能重复 【参考方案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') 的答案被接受。应该使用 *** 来学习最佳实践,而不是常见错误...)【参考方案11】:

使用

 $("#mySelectBox option:selected");

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

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

【讨论】:

没有对你投反对票(这里有一个连续的反对票!)但是myoption是什么??? 只是一个字符串,它应该是一个示例选项,OP 要测试它是否被选中 关于downvote,您可能想阅读my answer下的cmets。

以上是关于如何检查一个选项是不是被选中?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查复选框是不是被选中?

如何检查复选框是不是被选中?

如何检查“单选按钮”是不是被选中?

如何检查 JCheckBox 是不是被选中?

Django检查复选框是不是被选中

如何检查单选按钮是不是被选中