2016-06-09 45 views
0

我有一個表單,我抓住它裏面的所有輸入元素,並將它們放入一個對象的鍵和值中(這工作)...但是我wan不過濾掉不需要的按鈕...我怎樣才能刪除它/忽略它?從form.elements數組中刪除按鈕輸入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語法編寫的)

+0

嘗試'如果(形式[I] .TYPE === '按鈕')' –

+0

@DimaGimburg還表示:\ – Modelesq

+0

我覺得'form [i] .tagName ==='BUTTON'應該有效。 'element.type'也適用於Chrome,但我無法在WebAPI文檔中找到該屬性。請注意,它是大寫。請參閱[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/tagName)。 – Kazimieras

回答

1

您可以通過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 
    }); 

,或者,如果你喜歡的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; 
} 
+0

這也沒有工作。我只是可能不得不在後臺處理這個問題 – Modelesq

+0

其實我怎樣才能過濾出隱藏的輸入與你的第一個例子? – Modelesq

+0

@Modelesq - 'Array.reduce'是你的朋友 - 提供的功能更具可讀性,重構更好,可以共享(更好的代碼重用) - 請參閱下面的答案。 –

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開始我?

+0

嗯,這是我的錯誤。謝謝你收到 – Modelesq

+0

嗯如果我運行'console.log(form.elements);'它仍然在那裏:\ – Modelesq

+0

這在技術上應該工作 – Modelesq

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