为什么我的jQuery val()无法获取我选择框中实际选定的值?

3
我输入$('select[id*=lstAdvGradYear]')时,Chrome会给我返回:
<select name="Views\ContentArea$ctl00$lstAdvGradYear" id="Views\ContentArea_ctl00_lstAdvGradYear" class="ddReplace" style="display: none; ">
    <option value="2016">2016</option>
    <option value="2015">2015</option>
    <option value="2014">2014</option>
    <option selected="selected" value="2013">2013</option>
    <option value="2012">2012</option>

</select>

当我输入 $('select[id*=lstAdvGradYear]').val() 时,Chrome 的回复是 "2016"
当我输入 $('select[id*=lstAdvGradYear] option:selected ').val() 时,Chrome 也回复了 "2016"
当我输入 $('select[id*=lstAdvGradYear] option:selected') 时,Chrome 回复的是 [<option value="2016">2016</option>]
我做错了什么?
我已经确认没有其他名称类似的下拉菜单。
编辑:为了明确,我的问题是 .val() 应该返回 2013 而不是 2016。

它显示2013年。http://jsfiddle.net/gaeSC/。你使用的jQuery版本是什么? - meze
哎?我正在努力弄清楚为什么val()没有给我2013,因为那是选定的元素。我知道使用val()和不使用val()之间的区别。 - KallDrexx
我知道。对不起。我删除了我的评论,因为我对你的问题感到困惑。重新阅读后,我意识到我回答了一些完全不同的东西。 - kingcoyote
我已经更新了我的答案,并为您提供了更多信息。 - Vivian River
1个回答

3
这是因为前两种情况下你调用了$.val()函数,但在最后一种情况下,你没有调用。 $.val()返回HTML元素的值。$()返回代表一个或多个HTML元素的对象,并带有多个可以调用的方法,包括$.val()。
更新:根据文档(http://api.jquery.com/attribute-contains-selector/)显示,id *=右侧的值应该用引号括起来。这会有什么影响吗?

这与不使用val()无关。我的问题是Val()返回的值不正确,它应该返回2013而不是2016,因为2013是所选选项。 - KallDrexx
我刚开始也感到困惑。他说所有的都返回“2016”,但他的HTML显示选择了“2013”。这不是获取val或element的问题,而是获取错误的val/element。 - kingcoyote
你的更新是正确的,将其放在引号中修复了。谢谢,我都快抓狂了。 - KallDrexx
[attr=val]并不总是需要引号,如果只使用字母或没有特殊字符。值得注意的是,如果由于多个selected="selected"元素而从val()获取了错误的option元素值,则会发生类似的问题。 - NoBugs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接