当试图清除按钮输入时,Form.elements.filter不是一个函数
form.elements.filter is not a function when trying to weed out button inputs
form.elements
返回如下数组:
[
input#user_name,
input#user_email,
button#submit,
...
]
我正在尝试过滤掉按钮输入
<button type="submit" className="btn" id="edit">Save</button>
form.elements.filter(i => (
i.tagName !== 'BUTTON'
)).forEach(i => (// store stuff));
为什么这个不行?返回form.elements.filter is not a function
form.elements
返回一个HTMLFormControlsCollection
。
filter
不存在作为HTMLFormControlsCollection的操作,以及其他一些数组方法,如forEach
。
可以通过多种方式首先转换为数组。正如@DavidThomas所指出的,因为你正在使用箭头函数,你应该能够使用Array.from
var els = Array.from(form.elements);
// Otherwise, use [].slice.call(form.elements)
现在可以正常进行任何数组操作,包括forEach
, filter
等
els = els.filter(el => (
el.tagName !== 'BUTTON'
))
下面是一个完整的例子:
var form = document.querySelector('form');
var els = Array.from(form.elements);
els = els.filter(el => {
return (
el.tagName.toLowerCase() !== 'button' &&
el.getAttribute('type') !== 'button'
);
});
els.forEach(el => {
console.log(el);
});
<form>
<input type="text" value="1">
<input type="button" value="Input Button">
<textarea>Awesome Content</textarea>
<button>Another Button</button>
<button type="submit" className="btn" id="edit">Save</button>
</form>
如果性能成为一个问题,请记住您可以"合并"。利用HTMLFormControlsCollection
是"类数组":
.filter
调用转换为Array.from
。var form = document.querySelector('form');
var els_coll = form.elements;
els_array = Array.prototype.filter.call(els_coll, el => {
return (
el.tagName.toLowerCase() !== 'button' &&
el.getAttribute('type') !== 'button'
);
});
els_array.forEach(el => {
console.log(el);
});
<form>
<input type="text" value="1">
<input type="button" value="Input Button">
<textarea>Awesome Content</textarea>
<button>Another Button</button>
<button type="submit" className="btn" id="edit">Save</button>
</form>
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么