使用 javascript 读取 HTML5 输入单选标记
Reading HTML5 input radio tag with javascript
我想知道是否有一种没有循环的单行方法来读取HTML5中无线电输入的值。
在旧的 HTML 中:
<form>
<input type="radio" name="sex" value="male" checked>Male
<br>
<input type="radio" name="sex" value="female">Female
</form>
JavaScript是这样的:
var sexes = document.getElementsByName('sex');
var sex_value;
for(var i = 0; i < sexes.length; i++){
if(sexes[i].checked){
sex_value = sexes[i].value;
}
}
但是同样的事情可以在一行中使用Jquery来完成,例如
$('input[name="sex"]:checked').val();
所以我只想知道:
- 在没有Jquery的情况下,在HTML5中做到这一点是更好的方法吗?
- 有没有其他像Jquery这样的JS库可以做同样的单行方法或更好?
[JavaScript] 是这样的:
var sexes = document.getElementsByName('sex');
var sex_value;
for(var i = 0; i < sexes.length; i++){
if(sexes[i].checked){
sex_value = sexes[i].value;
}
}
但是同样的事情可以在一行中使用Jquery来完成,例如
$('input[name="sex"]:checked').val();
在原生 DOM/JavaScript 中的一行中也可以完成相同的操作:
// using a CSS selector to retrieve a single DOM node,
// and retrieving its value property:
document.querySelector('input[name=sex]:checked').value;
或者,要获取所有元素,它们是否应该为复选框,例如:
// using a CSS selector to retrieve all matching elements
// as a (non-live) NodeList:
var all = document.querySelectorAll('input[name=favourites]:checked');
要检索所有这些复选框的值,请检索到一个数组中:
// retrieving the elements into a NodeList:
var all = document.querySelectorAll('input[name=favourites]:checked'),
// using Array.prototype.slice() (with
// Function.prototype.call()) to convert
// the NodeList into an Array:
allArray = Array.prototype.slice.call(all, 0),
// using Array.prototype.map() to iterate over that
// array to return another array containing only
// the values of each of the array-elements:
allValues = allArray.map(function (arrayElement) {
return arrayElement.value;
});
如果你真的想,可以浓缩成几行(跳过对Array.prototype.slice()
的调用(:
var allValues = Array.map.call(document.querySelectorAll('input[name=favourites]:checked', function (arrayElement) {
return arrayElement.value;
});
引用:
- .CSS:
- 属性选择器。
- JavaScript:
-
Array.prototype.map()
. -
Array.prototype.slice()
. -
document.querySelector()
. -
document.querySelectorAll()
. -
Function.prototype.call()
.
-
- 有没有更好的方法不使用jQuery?没有循环和一行? 否
- 有没有另一个像jQuery这样的库可以更好地完成单行代码?
真正的问题是,为什么对jQuery的厌恶?jQuery被社区很好地测试和接受,以至于有无数的js库建立在jQuery之上。
原则上,您可以使用 RadioNodeList
属性,它是 HTML5 的一部分。但是,IE 8 及更早版本显然不支持它,并且根据 MDN 的说法,移动浏览器中的支持是未知的。
更确切地说,您从 form
元素开始,其中 elements
属性具有一个 namedItem
方法,该方法在将 name
属性的值作为参数给出时返回一个RadioNodeList
对象。该对象具有 value
属性,该属性生成由名称标识的组中当前选中的单选按钮的值。
例:
<form>
<input type="radio" name="sex" value="male" checked>Male
<br>
<input type="radio" name="sex" value="female">Female
<br>
<button type=button onclick=show()>Show sex</button>
</form>
<script>
function show() {
alert(document.forms[0].elements.namedItem('sex').value)
}
</script>
这是否比其他方法更好是一个意见问题,取决于上下文和范围。关于备用库的问题在 SO 是题外话。
相关文章:
- 互斥单选按钮和相应的输入字段
- 选中单选框时将属性添加到输入字段
- 选中单选框时禁用输入框
- 基于单选框更新页眉,选中并选择输入文本
- 选择单选按钮更新2个输入字段
- html/jquery输入类型:单选框中的文本不起作用
- 如果用户更改下拉选择,jQuery将删除单选按钮/输入选项
- 如何在选中单选按钮(输入)时触发事件
- 根据选定的单选按钮输入显示/隐藏 DIV
- 选中单选框输入时切换文本输入
- 根据单选按钮输入将表单发送给不同的收件人
- 单选按钮输入控制客户端验证
- 如何使用单选按钮输入禁用表单的某些元素
- jQuery查找选中单选的输入
- 单选按钮输入字段的JavaScript函数
- 无法使用JavaScript/jQuery动态删除单选按钮输入字段
- 使用jQuery存储单选按钮输入的数值
- Javascript:从两个文本输入和一个单选按钮输入生成URL
- 将单选按钮输入添加到文本框输入中,并将其存储在列表中
- 获取单选按钮输入的未定义值