2017-04-06 67 views
0

我有一個簡單的表單來收集某人的詳細信息。它將數據發送到firebase,並且我e.preventDefault()阻止其正常提交。這是處理程序;提交事件preventDefault()不適用於使用os9的iPad/iPhone

let frm = document.forms[0]; 
frm.addEventListener('submit', function(e) { 
    e.preventDefault(); 
    let formData = document.signup.elements; 
    formValues = getFormInfo(formData); 
    let submitted = writePupilRecord(formValues); 
    console.log(submitted); 
    removeForm(); 
    formResponse(); 
    return false; 
}); 

這是很難弄清楚的一點。它適用於Chrome,Safari,Firefox,android,最新的iPhone/iPad。它不適用於較舊的ios瀏覽器。 當我使用Firebase SDK獲得的Firebase服務器在本地嘗試時,我可以在控制檯中看到GET請求,當我導航到本地主機時以及在工作瀏覽器上提交表單時,沒有HTTP請求,正如您所期望的那樣,因爲我有preventDefault()編輯。但是當我用ios9使用XCode模擬器的時候,第二個請求包括提交的數據,就好像沒有調用preventDefault()方法一樣。 看着我的問題,我遇到了建議,將return false;添加到回調函數,但這沒有什麼區別。 爲什麼e.preventDefault()不適用於較老的iPad/iPhone,我能做些什麼才能使它工作?我首先使用javascript來構建表單,這仍然適用於較老的ios。

+0

查找ES6支持 – epascarello

回答

1

它在舊的osx瀏覽器中不起作用。

您正在使用在ES2015(又名「ES6」)中引入的let。這是舊版瀏覽器中的語法錯誤。如果你沒有處理最新的瀏覽器,把它切換到var(在那個代碼中,它沒有什麼明顯的區別)。


我意識到有可能是這樣的dupetarget和there is,但答案是過時的。我有added one這是最新的。

+1

如果我現在說'是的,我知道'你會相信我嗎?這是一個我忘記巴貝爾的小項目,我通常會這樣做。謝謝! – leonormes

+0

@leonormes::-)輕鬆完成。我有時必須在沒有轉譯的情況下處理一個限於ES5的項目,並且我必須非常小心地介紹箭頭函數,const,let等.ESLint可以提供幫助(雖然聽起來像是你而是加入Babel)。 –

相關問題