如何检查一个选项是不是被选中?
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 元素方法呢?!
阅读jQuery
tag 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 访问我的属性。在大多数情况下,这很可能只是口味问题。是的,有一股奇怪的投反对票!
我建议阅读jQuery
tag info 的了解你的DOM 属性和函数部分。没有理由使用较慢的代码+更多的代码来做简单的事情。 .is()
应该用于复杂的选择器,例如 $(...).is('.foo > [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。以上是关于如何检查一个选项是不是被选中?的主要内容,如果未能解决你的问题,请参考以下文章