从form.elements数组javascript中删除按钮输入

时间:2016-06-09 15:43:57

标签: javascript

我有一个表单,我抓住它里面的所有输入元素并将它们放入一个键中,并将值放入一个对象中(可行)...但是我不想过滤掉它不需要的按钮......如何删除它/忽略它?

如果我在console.log中返回form.elements:

[input#first_name.input-text, input#last_name.input-text, input#username.input-text, input#email.input-text, 
button#submit.btn ...]

  const formatData = {};
  const form = document.getElementById('signup');
  console.log(form.elements);

  for (let i = 1; i < myForm.elements.length; i++) {
      // check if button and remove / ignore
      if (form[i] === 'button') { // this doesn't work
          delete form[i];
      }
      const key = form.elements[i].name;
      const value = form.elements[i].value;
      formatData[key] = value;

如何确保不包含按钮? :\(这是用jsx语法编写的)

3 个答案:

答案 0 :(得分:1)

您可以按form.elements过滤tagName

const formatData = {};
const form = document.getElementById('signup');

[].slice.apply( form.elements ) // convert HTMLFormControlsCollection to Array
  .filter(( el ) => el.tagName !== 'BUTTON') // filter out all <button> elements
  .forEach(function ( el ) {
      formatData[ el.name ] = el.value; // add key / value to formatData object
  });

或者,如果您更喜欢for循环:

const formatData = {};
const form = document.getElementById('signup');

for (let i = 0, n = form.elements.length; i < n; i++) {
  if (form.elements[i].tagName === 'BUTTON') continue;

  formatData[ form.elements[i].name ] = form.elements[i].value;
}

答案 1 :(得分:0)

 for (let i = 1; i < myForm.elements.length; i++) {
      if (form[i].type !== 'button') { // or as suggested form[i].tagName !== 'BUTTON'
          const key = form.elements[i].name;
          const value = form.elements[i].value;
          formatData[key] = value;
      }

并且您不想遍历所有元素并使用0启动i?

答案 2 :(得分:0)

var
    elementCollection = document.forms[document.forms.length -1].elements,
    elementRegistry   = Array.from(

        elementCollection

    ).reduce(function (collector, elm) {
        if (
               (elm.tagName.toLowerCase() !== 'button')
            && !collector.regXIgnoreTypes.test(elm.type)
        ) {
          //var key = (elm.id || elm.name);
            var key = elm.name;
            if (key !== '') {

                collector.elementRegistry[key] = elm;
            }
        }
        return collector;
    }, {

      regXIgnoreTypes: (/^(?:button|submit|image|hidden)$/),
      elementRegistry: {}

    }).elementRegistry;

console.log('+++ elementRegistry +++', elementRegistry);