在单选按钮上使用过滤器

时间:2017-08-18 03:57:04

标签: javascript radio-button

在单选按钮上使用过滤器时,出现错误,指出.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);
}

3 个答案:

答案 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;
}