11

鉴于此 HTML 代码:

<select id="menu">
    <option>hi</option>
    <option>bye</option>
</select>

这个 jQuery 代码:

$("#menu option").first().attr("value")

返回hi,即使value菜单中的第一个选项没有属性。

如果<option>具有value属性,value则按预期返回该属性。

我怎样才能让上述代码的返回值是undefined/我可以识别的其他东西?或者我可以检查是否value设置了属性,如果没有则只运行上面的代码?

4

5 回答 5

22

使用:not([attr])选择器:

$("#menu option:not([value])");

http://jsfiddle.net/userdude/NQm54/

我还验证了更改后,[value]仍然报告为未设置,因此您继续收到相同的两个没有value属性的元素。

$('#menu').change(function(){
  console.log($(this).val());
  console.log($("#menu option:not([value])"));
});

http://jsfiddle.net/userdude/NQm54/2/

于 2013-01-13T05:22:58.617 回答
2
$("#menu option:eq(0)").not("[value]").length == 1
于 2013-01-13T05:36:37.953 回答
1

如果未设置 value 属性,则该值默认为文本值。只需将属性值设置为某个值,以便您可以识别它,例如一个空字符串,如下所示

<select id="menu">
    <option value="">hi</option>
    <option>bye</option>
</select>

然后这$("#menu option").first().attr("value")将返回一个空字符串

于 2013-01-13T05:19:31.153 回答
1
var option = document.getElementById("menu").options[0];
if (option.getAttribute("value") !== null) {
console.log("Has value: " + option.value);
 }
else {
console.log("Doesn't have a value.");
}
于 2013-01-13T05:35:56.440 回答
0

用这个$("option:selected", $("#menu")).attr("value");

如果选择的选项没有任何 value 属性,将返回 undefined ,您可以通过 !foo 捕获它

于 2016-11-22T11:13:16.457 回答