2014-01-14 458 views
1

我的html頁面有<input type=date>字段。我試圖在javascript中創建一個函數,如果選擇了比今天更長的日期,那麼它將在該字段中設置今天的日期。其實,我想限制最大日期到今天的日期。這裏是jsfiddle中的代碼。我究竟做錯了什麼?Javascript - 如何將html日期限制爲今天的日期?

HTML:

<div class="entry"> 
    <label for="startDate">Start date:</label> 
    <input id="startDate" name="startDate" type="date" oninput="validDate(startDate)"> 
</div> 

的Javascript:

function validDate(date) { 
    todayDate = getTodaysDate(); 
    if (date > todayDate) 
     document.searchForm["date"].value = todayDate; 
} 

function getTodaysDate(){ 
    date = new Date(); 
    day = date.getDate(); 
    month = date.getMonth() + 1; 
    year = date.getFullYear(); 

    if (month < 10) month = "0" + month; 
    if (day < 10) day = "0" + day; 

    today = year + "-" + month + "-" + day; 

    return today; 
} 
+0

看看[這篇文章](http://stackoverflow.com/q/8417199/1267304)。 – DontVoteMeDown

+0

不確定代碼是否正確,但至少'onxxx =「func()」'不會更改無效值。這需要'onxxx =「return func()」'。 – Pietu1998

回答

3

您可以設置max屬性將其限制於今天的日期:

document.getElementById('startDate').setAttribute('max', getTodaysDate()); 

硒Ëhttp://jsfiddle.net/4jCT6/1/

+0

只有safari不支持它。看到這裏http://stackoverflow.com/a/8419769/821057 –

1

這裏有一個更新的擺弄這對我的工作(在Chrome/Windows中,至少):

http://jsfiddle.net/nFHLn/4/

的JavaScript:

function validDate(date, theInput) { 
    var date = document.getElementById("startDate").value; 
    todayDate = getTodaysDate(); 
    if (date > todayDate) 
     theInput.value = todayDate; 
} 

function getTodaysDate(){ 
    date = new Date(); 
    day = date.getDate(); 
    month = date.getMonth() + 1; 
    year = date.getFullYear(); 

    if (month < 10) month = "0" + month; 
    if (day < 10) day = "0" + day; 

    today = year + "-" + month + "-" + day; 

    return today; 
} 

HTML:

<div class="entry"> 
    <label for="startDate">Start date:</label> 
    <input id="startDate" name="startDate" type="date" oninput="validDate(this.value, this)"> 
</div> 
+0

它確實工作,是的。但是'validDate(date)'函數對我來說看起來有些奇怪。你沒有任何參數調用函數。我想在表單上使用這個函數來處理多個日期字段,而不僅僅是'startDate'。 – Vladimir

+0

你是對的;這是我的錯誤。我已經更新了我的答案(和Fiddle),以使代碼更加便攜;你現在應該可以在不同的日期輸入中使用它。 – MassivePenguin