【发布时间】:2020-02-24 16:03:09
【问题描述】:
我的房地产网站有多个具有相同名称属性的单选按钮(例如 1room 2rooms 3rooms)用于过滤目的。
我意识到我的代码非常抗 DRY,而且看起来非常重复。
我试过了:
if (document.getElementById('rooms-all').checked) {
filters.rooms = 999999999;
} else if (document.getElementById('room-1').checked) {
filters.rooms = 1;
} else if (document.getElementById('room-2').checked) {
filters.rooms = 2;
} else if (document.getElementById('room-3').checked) {
filters.rooms = 3;
} else if (document.getElementById('room-4').checked) {
filters.rooms = 4;
} else if (document.getElementById('room-5').checked) {
filters.rooms = 5;
}
这很好用,但我想做类似的事情:
let x = document.getElementsByName('rooms').checked; // also tried .value
console.log(x)
但由于某种原因它返回 undefined
我的 HTML 看起来像
<input type="radio" id="rooms-all" class='radio' name="rooms" value="999999999" checked>
<label for="rooms-all">All</label>
<input type="radio" id="room-1" class='radio' name="rooms" value="1">
<label for="room-1">1 Room</label>
<input type="radio" id="room-2" class='radio' name="rooms" value="2">
<label for="room-2">2 Rooms</label>
<input type="radio" id="room-3" class='radio' name="rooms" value="3">
<label for="room-3">3 Rooms</label>
<input type="radio" id="room-4" class='radio' name="rooms" value="4">
<label for="room-4">4 Rooms</label>
<input type="radio" id="room-5" class='radio' name="rooms" value="5">
<label for="room-5">5 Rooms</label>
而我目前看到的我根本没有使用我给他们的值。
有什么更好的方法?
【问题讨论】:
-
“某些原因”是 getElementsByName 返回一个节点列表,您现在正在检查该节点列表是否设置了
checked属性,当然它没有。使用此方法,您仍然需要遍历列表,并查看是否为其中的任何元素单独设置了属性。 -
在提到的重复项stackoverflow.com/a/47391907/10955263 中检查类似的答案,以便更快地获取组中选中的单选按钮的值。
标签: javascript