如何检查是否选择了一个选项?


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

显然,这isChecked是行不通的。所以我的问题是执行此操作的正确方法是什么?谢谢。


2
00zebra00,感谢您在下面的许多选项中找到答案。但是,请确保在下面的评论中注意有关访问“最佳”属性的对话。一般的要点是,当你可以在JavaScript中直接访问一个元素(使用this.selected),您应绕过使用jQuery( $(this).prop("selected")),但他们为你们俩的工作。
veeTrain

Answers:


263

更新

对于所选选项,更直接的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问题:

获取当前选定的选项设置选定的选项如何在jQuery中获得$(this)选定的选项?option [selected = true]不起作用


它没有充分的理由使用jQuery。使用本地js DOM属性。看看这个
gdoron支持Monica 2012年

3
看来您没有阅读我的答案。this.selected可以用来代替$(this).is(":selected")我想不需要jsperf,对吗?我没有反对使用jQuery!的方法,但是在需要时使用它,而不是在开销和更多代码无所作为的时候使用它。
gdoron支持Monica 2012年

@gdoron this.selected是完全有效的,但是他要求使用正确的jQuery方法。
iambriansreed 2012年

2
@gdoron 我完全同意你的看法。也许我们这些在jQuery上长大的人需要参加一个补救性JavaScript类。:)
iambriansreed 2012年

2
@gmoron不,我的问题不赞成和不赞成。好的侦探工作。
iambriansreed 2012年

26

您可以通过以下方式获得所选选项:

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

现场演示

但是,如果要迭代所有选项,请使用this.selected代替this.isChecked不存在的选项:

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

现场演示

更新:

您有很多建议您使用的答案:

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

阅读标签信息中的“ 了解您的DOM属性和功能jQuery


1
@downvoter,想发表评论吗?摆脱阴影和战斗!:)
gdoron支持Monica 2012年

可能是因为您没有回答问题,但却提供了最佳实践。;)
iambriansreed 2012年

1
@iambriansreed。哈?!我没有回答这个问题?问题的哪一部分仍然没有答案?
gdoron支持Monica 2012年

2
这里有趣的讨论。:)不知道为什么要使用所有的DV,但是我会向使用过的所有用户发出紫外线this.selected。我同意您对jQuery过度/滥用的评论。知道jQuery的一部分是知道什么时候使用它。也就是说,请记住':selected'选择器是自定义的Sizzle选择器,因此使用它会禁用querySelectorAll在受支持的浏览器中的使用。当然,这不是世界末日,因为它提供了一些不错的简短代码,但是我个人倾向于避免使用仅Sizzle的东西。

@gdoron正如您在Meta中指出这个问题时,我很感兴趣。关于DV,此节点可能对您有用。
VisioN 2012年

4

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

如此处所示

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

编辑

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

if (this.selected == true) {

似乎同样有效!谢谢gdoron。


您能给我解释一下他为什么要$(this).prop("selected")代替this.selected吗?它给你什么?ps我不是拒绝
投票的人

@gdoron,我想到的主要优点是熟悉。我不确定is最好用什么,但是我喜欢通过prop和attr访问我的属性。在大多数情况下,这可能只是口味问题。是的,有令人好奇的否决权!
veeTrain 2012年

2
我建议阅读标签信息的“ 了解您的DOM属性和功能”部分。没有理由使用较慢的代码+更多的代码来做简单的事情。应该用于$(...)。is(“:visiable”)之类的复杂选择器。jQuery .is()$(...).is('.foo > [name="aaa"] input') or for properties that are not native DOM elements properties like
gdoron支持Monica 2012年

@gdoron; 非常感谢您指出这一点。我已经相应更新了我的答案。
veeTrain 2012年

没问题。如果您认为我的回答要比其他人更好,您可以提高我的回答。(我不希望答案$(this).is(':selected')被接受。应该使用Stackoverflow来学习最佳实践,而不是常见的错误...)
gdoron支持Monica 2012年

3

您可以通过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>



2

将此作为您的选择列表:

<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!');
    }

}

0

就我而言,我不知道为什么选择始终为真。因此,我唯一能想到的方法是:

var optionSelected = false;
$( '#select_element option' ).each( function( i, el ) {
    var optionHTMLStr = el.outerHTML;

    if ( optionHTMLStr.indexOf( 'selected' ) > 0 ) {
        optionSelected = true;
        return false;
    }
});

0

如果只想检查是否选择了某个选项,则不需要遍历所有选项。做就是了

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

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


0

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

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

0

如果要通过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";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.