[英]Javascript " onsubmit " Event Not Working Correctly
我只是在練習js。 我試圖在表單中進行非常簡單的驗證,但正如我所料,它帶來了一個錯誤。 這是我的代碼:
var form = document.getElementById('form'); var name = document.getElementById('name'); var email = document.getElementById('email'); var msg = document.getElementById('message'); var error = document.getElementById('error'); function handlingForm() { form.onsubmit = function(c) { if (name.value == "") { error.innerHTML = "Error Submiting Form !"; return false; } else { error.innerHTML = "You have successfuly submited the Form..! Congrats ;)"; return true; // ;) Just Kidding :D } }; } window.onload = function(c) { handlingForm(); }
<!DOCTYPE html> <html> <head> <title>jsForm</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div id="container"> <form id="form"> <input type="text" placeholder="Name" id="name"> <input type="text" placeholder="Email" id="email"> <textarea rows="4" placeholder="Message" id="message"></textarea> <input type="submit" value="Send" id="send"> <p id="error"></p> </form> </div> <script src="script.js"></script> </body> </html>
問題是,它沒有驗證它。 每次它在提交時返回 true 但當我用“email.value”替換“name.value”時,代碼就起作用了。 我現在不知道實際上是什么問題。 如果有人可以幫助我..
看起來像 id name
的輸入在 JavaScript 執行時沒有在 DOM 中創建。 您可以通過將代碼放在window.onload
代碼塊或form.onsubmit
來解決該form.onsubmit
var form = document.getElementById('form'); var email = document.getElementById('email'); var msg = document.getElementById('message'); var error = document.getElementById('error'); function handlingForm() { form.onsubmit = function(c) { var name = document.getElementById('name'); if (name.value == "") { error.innerHTML = "Error Submiting Form !"; return false; } else { error.innerHTML = "You have successfuly submited the Form..! Congrats ;)"; return true; // ;) Just Kidding :D } }; }; handlingForm();
<div id="container"> <form id="form"> <input type="text" placeholder="Name" id="name"> <input type="text" placeholder="Email" id="email"> <textarea rows="4" placeholder="Message" id="message"></textarea> <input type="submit" value="Send" id="send"> <p id="error"></p> </form> </div>
您名為name
變量是一個問題。 它不起作用,因為name
在某些實現中是預定義的標識符。 盡管它不是保留關鍵字,但最好避免將其用作變量名。
將其重命名為name_
(或幾乎任何其他名稱),它將起作用。
如果name.value
沒有值,則為undefined
。 所以undefined !== ""
,這就是為什么它永遠不會是真的。 只需對name.value
進行空檢查。 此外,您需要在該函數內部移動name
,因為它是第一次被調用, value
將始終未定義:
var form = document.getElementById('form'); var email = document.getElementById('email'); var msg = document.getElementById('message'); var error = document.getElementById('error'); function handlingForm() { form.onsubmit = function(c) { var name = document.getElementById('name'); if (!name.value) { error.innerHTML = "Error Submiting Form !"; return false; } else { error.innerHTML = "You have successfuly submited the Form..! Congrats ;)"; return true; // ;) Just Kidding :D } }; } window.onload = function(c) { handlingForm(); }
<!DOCTYPE html> <html> <head> <title>jsForm</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div id="container"> <form id="form"> <input type="text" placeholder="Name" id="name"> <input type="text" placeholder="Email" id="email"> <textarea rows="4" placeholder="Message" id="message"></textarea> <input type="submit" value="Send" id="send"> <p id="error"></p> </form> </div> <script src="script.js"></script> </body> </html>
嘗試這個:
window.onload = handlingForm();
為什么你的函數有c
參數?
這是由於網頁中處理全局變量的方式的一種怪癖。 每個都被視為window
對象的一個屬性,因此當您分配給email
,您實際上是在創建並分配給window.email
,依此類推。
但是,window 對象的一些屬性已經存在並且對瀏覽器具有特殊意義,例如window.location
(當前 URL)和window.name
(用於跨框架鏈接目標)。
要在實踐中查看它,請在全局范圍內(在任何函數之外)執行此操作:
var location; // should be undefined, right?
alert(location); // but it's actually window.location
由於window.name
的特殊含義,您分配給它(或全局name
)的任何內容都將轉換為字符串。 您嘗試存儲的元素變為字符串,因此不再作為元素工作。
要修復它,只需將您的代碼移動到一個函數中,以便變量是局部的並且不再具有這種奇怪的行為。 您可以為此使用window.onload
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.