在我的html表單中,當一個字段留空並執行Javascript時,會使用innerHTML顯示一條錯誤消息。但是,在允許的輸入用於該字段後,如果另一個字段爲空,則該消息不會消失。如果我刷新頁面中的所有信息,但innerHTML消息消失。點擊計算按鈕並執行Javascript後,有沒有辦法讓錯誤消息消失?就像讓它重新檢查並以某種方式將信息帶走。使用innerHTML文本的Javascript表單驗證不會消失
這裏是我的html代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>The Happy Hoppin' Hotel</title>
<link type="text/css" rel="stylesheet" href="happyhoppin_skeleton.css" />
<script src="happyhoppin_skeleton.js" language="javascript" type="text/javascript"></script>
</head>
<body>
<form>
<h1>The Happy Hoppin' Hotel Checkout Page</h1>
<p>Fill out the form below to calculate balance due</p>
Guest ID Number: <input type="text" id="custID" /><div id="guestID"> </div>
Room Type:
<select id="roomType" />
<option></option>
<option>Double</option>
<option>Single</option>
<option>Parlor</option>
</select><div id="room"> </div>
Length of Stay: <input type="text" id="stayLength" name="" /><div id="stay"> </div>
Number of Drinks: <input type="text" id="drinkNum" name="" /><div id="drink"> </div>
Number of Towels: <input type="text" id="towelNum" name="" /><div id="towel"> </div>
Number of Flushes: <input type="text" id="flushNum" name="" /><div id="flush"> </div>
Bug Complaints?: <label><br>
<input type="radio" id="radio" name="bugComplaint" value="Yes" onclick="getCheckedRadio(this)" />Yes<br>
<input type="radio" id="radio" name="bugComplaint" value="No" onclick="getCheckedRadio(this)" />No
<div id="comments">Customer Comments:
<textarea name="customerComment" id="comments" onFocus="this.value=''" value="Make me disappear" cols="50" rows="5">Enter your comments here...</textarea>
</div>
<input type="button" onclick="calculateFinalBill()" value="Calculate">
</form>
</body>
</html>
這裏是我的Javascript代碼:
const doublePrice = 150;
const singlePrice = 100;
const parlorPrice = 80;
const drinkPrice = 5;
const towelPrice = 3;
const flushPrice = 1;
var custID;
var roomPrice;
var stayLength;
var drinkNum;
var towelNum;
var flushNum;
var totalDue;
var subtotal;
var roomType;
var bugDiscount;
function calculateFinalBill() {
validateForm();
if(roomType == "Double"){
roomPrice = doublePrice;
}
if(roomType == "Single"){
roomPrice = singlePrice;
}
if(roomType == "Parlor"){
roomPrice = parlorPrice;
}
roomTotal = roomPrice * stayLength
towelTotal = towelPrice * towelNum
flushTotal = flushPrice * flushNum
drinkTotal = drinkPrice * drinkNum
subtotal = roomTotal + towelTotal + flushTotal + drinkTotal
totalDue = subtotal - bugDiscount
displayBill();
}
function getCheckedRadio(which){
var bugValue = which.value;
if (bugValue == "No"){
bugDiscount = 0;
}
if (bugValue == "Yes"){
bugDiscount = 20;
}
}
function validateForm(){
custID = parseInt(document.getElementById("custID").value);
if(isNaN(custID)){
document.getElementById('guestID').innerHTML="*Guest ID must be a number"
throw "stop execution";
}
if(custID <= 0){
document.getElementById('guestID').innerHTML="*Guest ID must be greater than zero"
throw "stop execution";
}
roomType = document.getElementById("roomType").value;
if(roomType == ""){
document.getElementById('room').innerHTML="*Room type must be selected"
throw "stop execution";
}
stayLength = parseInt(document.getElementById("stayLength").value);
if(isNaN(stayLength)){
document.getElementById('stay').innerHTML="*Length of Stay must be a number"
throw "stop execution";
}
if(stayLength < 0){
document.getElementById('stay').innerHTML="*Length of Stay must be greater than zero"
throw "stop execution";
}
drinkNum = parseInt(document.getElementById("drinkNum").value);
if(isNaN(drinkNum)){
document.getElementById('drink').innerHTML="*Number of Drinks must be a number"
throw "stop execution";
}
if(drinkNum < 0 || drinkNum > 25){
document.getElementById('drink').innerHTML="*Number of Drinks must be 0-25"
throw "stop execution";
}
towelNum = parseInt(document.getElementById("towelNum").value);
if(isNaN(towelNum)){
document.getElementById('towel').innerHTML="*Number of Towels must be a number"
throw "stop execution";
}
if(towelNum < 0){
document.getElementById('towel').innerHTML="*Number of Towels must be zero or greater"
throw "stop execution";
}
flushNum = parseInt(document.getElementById("flushNum").value);
if(isNaN(flushNum)){
document.getElementById('flush').innerHTML="*Number of Flushes must be a number"
throw "stop execution";
}
if(flushNum < 0){
document.getElementById('flush').innerHTML="*Number of Flushes must be zero or greater"
throw "stop execution";
}
customerComment = document.getElementById("customerComment");
}
function displayBill(){
var newPage = "<html><head><title>Billing Summary</title></head>"; //Add CSS after title
newPage += "<body><h1>Happy Hoppin Hotel</h1>";
newPage += "<h2>Guest Billing Summary</h2>";
newPage += "Guest Identification: " + custID;
newPage += "<br />";
newPage += "Room Type: " + roomType;
newPage += "<br />";
newPage += "Length of Stay: " + stayLength;
newPage += "<br />";
newPage += "Room Charge: $" + roomTotal;
newPage += "<br />";
newPage += "Drink Charge: $" + drinkTotal;
newPage += "<br />";
newPage += "Towel Charge: $" + towelTotal;
newPage += "<br />";
newPage += "Flushing Charge: $" + flushTotal;
newPage += "<br />";
newPage += "Subtotal: $" + subtotal;
newPage += "<br />";
if(bugDiscount != 0)
{
newPage += "Discount: $" + bugDiscount;
newPage += "<br />";
}
newPage += "Total Due: $" + totalDue;
newPage += "<br />";
newPage += "Come back and visit us again at the Happy Hoppin' Hotel"
var j = window.open('','','width=400,height=500');
j.document.write(newPage);
j.document.close();
}
這可能有助於作爲視覺http://jsbin.com/ifuxiv/1/edit 如果你點擊計算,輸入客戶ID的值,然後單擊再次計算,您會看到「訪客ID必須是數字」消息不會消失。
如果我的問題很混亂或需要任何其他信息,請在拒絕我的問題之前詢問。謝謝。
document.getElementById('guestID').innerHTML='';
document.getElementById('room').innerHTML='';
document.getElementById('stay').innerHTML='';
document.getElementById('drink').innerHTML='';
/// and so on.
但是它可能是最好的一個更加乾燥的方式來處理這個(不要重複自己),要麼創建:
謝謝!那太簡單了。我不知道爲什麼我沒有想到它。 – TheUnCola