简体   繁体   English

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

[英]remove button input from form.elements array javascript

I have a form, and I'm grabbing all input elements inside of it and place them into an their keys and values into an object (That works)... However I wan't to filter out the un needed button... How can I remove it/ ignore it? 我有一个表单,并且要抓取其中的所有输入元素,并将它们放入它们的键中,并将值放入对象中(这是可行的)...但是我不想过滤掉不需要的按钮...如何删除/忽略它?

if I console.log form.elements it returns: 如果我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;

How can I make sure button isn't included? 如何确定不包含按钮? :\\ (this is written in jsx syntax) :\\(这是用jsx语法编写的)

You can filter form.elements by tagName . 您可以通过tagName过滤form.elements

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
  });

OR, if you prefer the for loop: 或者,如果您更喜欢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;
}
 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;
      }

and don't you want to loop through all the elements and start the i with 0? 您是否不想遍历所有元素并以0开头i?

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM