2013-10-13 32 views
0

我一直在撕我的頭髮,試圖找出爲什麼將一行文字添加到if聲明會導致表單提交而無需驗證。聲明造成表單未經驗證提交

這是這是造成這一問題的部分代碼:

var firstName = document.getElementById("firstName"); 
// if first name is empty 
if (firstName.value == "") { 
    var fnError = document.getElementById("fnError"); 
    fnError.innerHTML = "*Please enter your first name"; 
    fnResult = false; 
} else { 
    // Store firstName using local storage 
    localStorage.setItem("firstName", firstName.value); 
} 

我試圖進入下面的代碼行到else聲明:

fnError.innerHTML = ""; 

的形式進行驗證使用onsubmit事件處理程序:

var btnSubmit = document.getElementById("formUser"); 
btnSubmit.onsubmit = validate; 

取決於驗證條件是否滿足,驗證函數返回truefalse。所有這些目前運行良好,直到我嘗試添加該行代碼,然後在下一次用戶按下提交按鈕時發送表單,而不管條件是否滿足。

我是JavaScript新手,所以有可能丟失了一些明顯的東西。

非常感謝!

+2

缺少重要的代碼。你能完成它,否則,創建一個可以顯示問題的jsfiddle?我會在每個必需的表單域中寫入'required',如'所示。 –

+0

「formUser」是您的表單的ID嗎?你在瀏覽器的控制檯中是否有任何異常? – Spooky

+0

請說明如何聲明'fnResult'變量。可能會被綁定到'window'上下文嗎? – ivanperelivskiy

回答

0

以下是一個可能的問題:如果您將違規行插入代碼中,如下所示,則函數在返回值之前失敗。在「else」塊中,fnError將在範圍內,但其值將是未定義的。嘗試在未定義的值上設置屬性會導致錯誤。

} else { 
    // Store firstName using local storage 
    fnError.innerHTML = ""; 
    localStorage.setItem("firstName", firstName.value); 
} 

爲了解決這個問題,前移動至下面的行中的「if」塊:

var fnError = document.getElementById("fnError"); 

現在fnError變量將包含在兩個「如果」的錯誤消息元件有效參考和「其他」塊。

+0

它的工作!謝謝!我知道這會很簡單。 – tracey