2014-10-30 263 views
0

我想知道這個代碼中的錯誤是什麼。我想與用戶輸入的日期比較當前日期和日期inp

<script type="text/javascript"> 
function validate() 
{ 
if(document.myForm.name.value == "") 
    { 
    alert("Please provide your date of birth!"); 
    document.myForm.dob.focus() ; 
    return false; 
    } 
var q = new Date(); 
var m = q.getMonth(); 
var d = q.getDate(); 
var Y = q.getFullYear(); 
var date = new Date(Y,m,d); 
var r = document.getElementById(dates).value; 
var m1 = r.getMonth(); 
var d1 = r.getDate(); 
var Y1 = r.getFullYear(); 
var mydate = new Date(Y1,m1,d1) ; 
if(date<=mydate) 
{ 
    alert("greater"); 
    return false; 
} 
else 
{ 
    alert("smaller"); 
    return false; 
} 
return true; 
} 
</script> 
<form name="myForm" method="post" onsubmit= "return(validate());"> 
Name: <input type="text" name="name"><br> 
Date: <input type="date" id="dates" name="dates"> 
<br/> 
<INPUT TYPE="submit" VALUE="Submit" > 
</form> 

我覺得比較今天的日期「變種R =的document.getElementById(日期).value的;」這段代碼是不工作

+0

'getElementbyid'應該是'getElementById' – pawel 2014-10-30 09:03:15

回答

0

你有幾個錯字和邏輯錯誤。此代碼應該可以工作。

function validate() 
{ 
if(document.myForm.name.value == "") 
    { 
     alert("Please provide your date of birth!"); 
     document.myForm.dob.focus() ; 
     return false; 
    } 
var q = new Date(); 
var m = q.getMonth(); 
var d = q.getDate(); 
var y = q.getFullYear(); 
var date = new Date(y,m,d); 
var r = Date.parse(document.getElementById("dates").value); 

if(date<=r) 
{ 
    alert("greater"); 
    return false; 
} 
else 
{ 
    alert("smaller"); 
    return false; 
} 
return true; 
} 
+0

這一個正常工作與小的變化 - 分號後警告(「小」);「 – 2014-10-30 13:23:01

+0

Opps,我的錯誤,當我複製和粘貼。謝謝。 – 2014-10-31 02:11:33

1

函數名稱應該是:

document.getElementById 

(你缺少一些大寫字母)

而且,你是治療的document.getElementById(dates).value結果,就好像它會給你返回一個Date對象,但它實際上會給你一個字符串 - 在你調用getMonth/getData/getFullYear之前,你需要將它轉換成Date,this question的答案應該可以幫助你。

+0

是不是使用'var date = new Date(Y,m,d);'也不正確?據我瞭解,這是使用一個變量'Y',沒有定義任何地方。 – 2014-10-30 09:04:05

+0

@CalvinScherle是的,它應該是小寫的Y. – Scimonster 2014-10-30 09:04:29

+0

實際上,與之後聲明的'myDate'變量相同。'alert(「small」)'後面還有一個缺失的分號。 – 2014-10-30 09:05:10

1

我在下面的代碼主要錯誤的地方放置註釋。

function validate() 
{ 
    if(document.myForm.name.value == "") // Not an error per se, but you should use === to compare strings this way 
    { 
     alert("Please provide your date of birth!"); 
     document.myForm.dob.focus() ; 
     return false; 
    } 
    var q = new Date(); 
    var m = q.getMonth(); 
    var d = q.getDate(); 
    var y = q.getFullYear(); 
    var date = new Date(Y,m,d);  // The variable Y is not defined. You probably meant lowercase y. 
    var r = document.getElementbyid(dates).value; // Wrong case. Should be: document.getElementById 
    var m1 = r.getMonth(); 
    var d1 = r.getDate(); 
    var y1 = r.getFullYear(); 
    var mydate = new Date(Y,m,d) ; // Same thing, probably meant lowercase y again. 
    if(date<=mydate) 
    { 
     alert("greater"); 
     return false; 
    } 
    else 
    { 
     alert("smaller") // This statement is missing a semicolon 
     return false; 
    } 
    return true; 
} 

此外,它還不完全清楚你正在嘗試做什麼。最後,假設你解決這些語法錯誤,你有三個日期變量:

  • q,這與當前的日期和時間創建。

  • date,它剛剛通過了與q相同的當前日期和時間。

  • mydate,其中...也包含當前日期和時間,因爲您剛傳遞給您q的相同值,您傳遞給date

那麼既然你比較兩個日期對象設置爲相同的日期,你將永遠提醒「大」(這是不是真的更大,因爲他們是平等的,但是那是另外一個問題)。

我也覺得很奇怪,這個驗證函數在所有情況下返回false。由於您的if/else語句,因此無法返回true。對於一個應該驗證某個東西的函數,驗證總是返回false似乎很奇怪。

此外,如在@codebox他的回答說:document.getElementById(dates).value只是返回一個字符串,則必須轉換到一個新的Date對象,如果你想讀它的日期值到您的m1d1y1變量(目前爲止,它們甚至從未被使用過)。

相關問題