javascript – 如何polyfill RadioNodeList?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何polyfill RadioNodeList?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1568字,纯文字阅读大概需要3分钟。
内容图文
背景
根据WHATWG,someForm.elements应返回HTMLFormElementsCollection.
如果多个元素共享相同的名称,则HTMLFormElementsCollection将返回RadioNodeList.
RadioNodeList具有特殊的value语义,它返回节点列表中第一个检查的无线电列表的值.
这将允许following answer to work if it were implemented
I naively attempted a polyfill基于主机对象表现良好(根据WebIDL),但它们显然不是.
题
当我们等待浏览器成为RadioNodeList或WebIDL兼容时,这个polyfill的另一种有效实现是什么?
示例参考代码
<form name="myform">
<input type="radio" name="foo" value="10" /> foo
<input type="radio" name="foo" value="30" /> bar
</form>
var myform = document.forms.myform;
var radio = myform.elements.foo;
var price = radio.value;
天真的尝试参考代码
(function () {
var pd = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, "elements"),
getElements = pd.get;
pd.get = get;
Object.defineProperty(HTMLFormElement.prototype, "elements", pd);
function get() {
var elements = getElements.call(this);
if (elements.length) {
Object.defineProperty(elements, "value", {
get: getRadioNodeListValue,
set: setRadioNodeListValue,
configurable: true
});
}
return elements;
}
function getRadioNodeListValue() {
for (var i = 0, len = this.length; i < len; i++) {
var el = this[i];
if (el.checked) {
return el.value;
}
}
}
function setRadioNodeListValue(value) {
for (var i = 0, len = this.length; i < len; i++) {
var el = this[i];
if (el.checked) {
el.value = value;
return;
}
}
}
}());
解决方法:
如果您可以接受将值getter连接到NodeList上,那么以下内容应该可以正常工作
感谢@@ Esailija
you could also just add .value to NodeList prototype
内容总结
以上是互联网集市为您收集整理的javascript – 如何polyfill RadioNodeList?全部内容,希望文章能够帮你解决javascript – 如何polyfill RadioNodeList?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。