2013-04-14 73 views
2

在我的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. 

但是它可能是最好的一個更加乾燥的方式來處理這個(不要重複自己),要麼創建:

回答

1

這可以簡單地通過驗證的開始重置你的錯誤消息來解決用於設置每個錯誤消息的通用方法,或者至少存儲對每個錯誤輸出元素的var引用,即,這意味着您可以輕鬆地在需要的地方編寫gID.innerHTML,並且可以節省重新搜索DOM的空間。

+0

謝謝!那太簡單了。我不知道爲什麼我沒有想到它。 – TheUnCola