在单选按钮上使用过滤器时,出现错误,指出.filter
不是函数。据我所知,按名称选择单选按钮会返回一个数组,我应该能够在数组上使用过滤器。
任何帮助都将受到高度赞赏。
<form action="" name='myForm'>
<p>Select the Beach</p>
<input type="checkbox" value='miami' id='miami' name='check'>
<label for="miami">Miami</label>
<br>
<input type="checkbox" value='florida' id='florida' name='check'>
<label for="florida">Florida</label>
<br>
<input type="checkbox" value='jamaica' id='jamaica' name='check'>
<label for="jamaica">Jamaica</label>
<p>Select the Airline</p>
<input type="radio" value='american' id='american' name='airline'>
<label for="american">American</label>
<br>
<input type="radio" value='air india' id='airIndia' name='airline'>
<label for="airIndia">Air India</label>
<br>
<input type="radio" value='indigo' id='indigo' name='airline'>
<label for="indigo">Indigo</label>
<br>
<br>
<button type='submit'>Submit</button>
</form>
脚本
var myForm=document.myForm;
myForm.addEventListener('submit',getAns);
function getAns(e){
e.preventDefault()
var radios=myForm.airline,
checks=myForm.check;
console.log(radios);
var airline= radios.filter(function(val){
return val.checked;
});
console.log(radios);
}
答案 0 :(得分:2)
它不是一个数组,而是一个类似数组的对象。
您仍然可以使用过滤器,但必须使用.BBBB.VALUES |= map_values(.new = .old[1])
才能使其生效。
call
编辑:远远澄清,var myForm=document.myForm;
myForm.addEventListener('submit',getAns);
function getAns(e){
e.preventDefault()
var radios=myForm.airline,
checks=myForm.check;
console.log(radios);
var airline= [].filter.call(radios, function(val){
return val.checked;
});
console.log(airline);
}
允许您使用为其他对象或类创建的方法,并在您自己的对象上使用它们。在这种情况下,过滤器方法是针对数组进行的,但是如果使用call,则可以在表单集合中使用它。 Some further documentation here.
答案 1 :(得分:1)
问题是myForm.airline
会返回对象,而不是数组。
使用jQuery,您可以使用$("input[name=airline]:checked").val()
var myForm = document.myForm;
myForm.addEventListener('submit', getAns);
function getAns(e) {
e.preventDefault();
var radios = myForm.airline;
var airline = $("input[name=airline]:checked").val()
console.log(airline);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" name='myForm'>
<p>Select the Beach</p>
<input type="checkbox" value='miami' id='miami' name='check'>
<label for="miami">Miami</label>
<br>
<input type="checkbox" value='florida' id='florida' name='check'>
<label for="florida">Florida</label>
<br>
<input type="checkbox" value='jamaica' id='jamaica' name='check'>
<label for="jamaica">Jamaica</label>
<p>Select the Airline</p>
<input type="radio" value='american' id='american' name='airline'>
<label for="american">American</label>
<br>
<input type="radio" value='air india' id='airIndia' name='airline'>
<label for="airIndia">Air India</label>
<br>
<input type="radio" value='indigo' id='indigo' name='airline'>
<label for="indigo">Indigo</label>
<br>
<br>
<button type='submit'>Submit</button>
</form>
答案 2 :(得分:0)
因为过滤器是数组功能
所以,所以从下面改变你的代码
var myForm=document.myForm;
myForm.addEventListener('submit',getAns);
function getAns(e){
e.preventDefault()
var radios=getFields(),
checks=myForm.check;
console.log(radios);
var airline= radios.filter(function(val){
return val.checked;
});
console.log(airline);
}
function getFields() {
inputs=myForm.airline;
var output = [];
for (var i=0; i < inputs.length ; ++i)
output.push(inputs[i]);
return output;
}