ie7中<option>的val()方法返回文本而非值

4
$(this).find('select option:selected').each(function (i, val) {

    var selectedValue = $(val).val(); //this returns the text from the option instead of the value
});

这是ie7中已知的问题吗?我没有找到任何相关信息。有什么可能的解决方法吗?谢谢。

你正在使用哪个版本的jQuery? - Matt
这不是获取选定值的正确方式。在 select 元素上调用 .val() - Felix Kling
1
顺便提一下,在 .each() 中通常不需要接受任何参数 - 元素也可以通过 this 访问。 - ThiefMaster
@ThiefMaster 我知道,这只是一个老习惯 :-) 虽然谢谢你告诉我。 - Johan
@T.J.Crowder 我会记住这个,直到下一次。 - Johan
3个回答

5
根据http://api.jquery.com/val/上的文档,
.val()仅适用于表单元素的值,例如input、select和textarea。 对于并在其上调用.val(),您的原始代码实际上是在option上调用val(),而不是实际的select元素,这就是为什么它不起作用的原因。
$(this).find('select').each(function (i, val) {

    var selectedValue = $(this).val(); 
});
val()方法有一个额外的好处,即在选择多个选项时能够返回一个值数组(我强调了这一点):

val()方法主要用于获取表单元素(如input、select和textarea)的值。对于包含<select multiple="multiple">元素的情况,val()方法返回一个包含每个选定选项的数组;如果没有选定选项,则返回null。


0

尝试

用于单选

var selectedValue = $(this).val();

你只需要写上面这行代码就可以获取所选的值,不需要其他任何东西。

对于多选框,应该是:

var result = ""; 
$('#idselect  option:selected').each(function(i, item)
{     
   result += $(this).val() + ", "; 
}); 

4
$(val)$(this)是等价的吗? - Johan
我认为他的意思是这就是你所需要的所有代码。他不仅仅是替换函数代码。 - Álvaro González
1
在OP的代码中,this(在最外层)显然不是一个select元素(它是包含一个或多个select元素的东西),所以这样做行不通。 - T.J. Crowder

0

这是一个预期的行为,因为您要求选项的值而不是元素本身。

不要过于复杂化事情。

$(this).find('select').each(function() {
   var val = $(this).val();
});

我知道$(this)会返回一个jQuery DOM元素,但是this返回什么? - Johan
@Johan,this返回未经jQuery包装的HTML元素,通常使用document.getElementById('id')来接收。 - Starx
那么 this 等于 $(this).get(0) 还是 $(this)[0] - Johan
@Johan:是的。例如,如果你在上面使用了 eachthis 将会指向实际的 select DOM 元素。$(this) 调用 jQuery 函数将其包装成 jQuery 对象,这样你就可以使用所有 jQuery 的好处了。 :-) - T.J. Crowder
@Johan,没错...你懂了。 - Starx

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