2015-11-19 66 views
3

嗨我基本上正試圖禁用另一個輸入字段,如果今天從另一個輸入字段(日期)設置爲今天。我似乎無法將onchange強制轉換爲輸入字段,並將該值存入變量以使其工作。如何從onchange獲得價值?

我已經成功地將onchange(this)放置到輸入字段上,但我必須將它取出並強制將JS onchange放到它上面。

我試過下面的代碼。正如你所看到的,這是應該做的事情時,時間是上午10點以前和日期選擇爲今天:

<script> 
    var date = new Date(); 
    var dd = date.getDate(); 
    var mm = date.getMonth()+1; 
    var yyyy = date.getFullYear(); 
    var hrs = date.getHours(); 

    if(dd<10) { 
     dd='0'+dd 
    } 

    if(mm<10) { 
     mm='0'+mm 
    } 

    date = yyyy+'-'+mm+'-'+dd; 


    var userDateEntry = document.getElementById("fm_deliverydate").onchange().value; 

    if (hrs >= 10 && userDateEntry == date) { 
     alert("Shipping for today has ended. Your order will arrive tomorrow"); 
     document.getElementById('fm_deliverytime').disabled= true; 
    } 
    else{ 
     document.getElementById('fm_deliverytime').disabled= false; 
    } 
</script> 

<input type="date" name="DateName" id="fm_deliverydate" /> 

<input type="time" name="TimeName" id="fm_deliverytime" /> 
+2

你在哪裏添加'change'聽衆? 'dateEntered'在哪裏被調用?正如所寫的,這段代碼沒有意義。 – Mathletics

+0

是的,我沒有看到'dateEntered()'和你的輸入元素之間的關係。你如何註冊'onchange'處理程序?我們錯過了代碼的一些關鍵元素。 – Amy

+0

我原本在輸入onchange中有方法dateEntered(),我把它取出來。我忘記了在腳本中處理這個函數! –

回答

2

您沒有正確安裝的情況下。您附加使用addEventListener的活動。

小提琴:http://jsfiddle.net/AtheistP3ace/125jnvwp/1/

var date = new Date(); 
var dd = date.getDate(); 
var mm = date.getMonth() + 1; 
var yyyy = date.getFullYear(); 
var hrs = date.getHours(); 

if (dd < 10) { 
    dd = '0' + dd 
} 

if (mm < 10) { 
    mm = '0' + mm 
} 

date = yyyy + '-' + mm + '-' + dd; 

var userDateEntry = document.getElementById("fm_deliverydate"); 
userDateEntry.addEventListener('change', 
    function() { 
     if (hrs >= 10 && userDateEntry.value == date) { 
      alert("Shipping for today has ended. Your order will arrive tomorrow"); 
      document.getElementById('fm_deliverytime').disabled = true; 
     } else { 
      document.getElementById('fm_deliverytime').disabled = false; 
     } 
    } 
); 
0

嘗試添加事件偵聽器的元素,而是和你的射擊功能時,它的變化。試試jsFiddle。您也可以考慮添加輸入日期低於當前日期的情況。截至目前,您可以輸入過去的日期,但仍然可以輸入時間。

<input type="date" name="DateName" id="fm_deliverydate" /> 
<input type="time" name="TimeName" id="fm_deliverytime" /> 

<script> 
var date = new Date(); 
var dd = date.getDate(); 
var mm = date.getMonth()+1; 
var yyyy = date.getFullYear(); 
var hrs = date.getHours(); 

if(dd<10) { 
    dd='0'+dd 
} 

if(mm<10) { 
    mm='0'+mm 
} 

date = yyyy+'-'+mm+'-'+dd; 

(function(){ 
    document.getElementById("fm_deliverydate").onchange = function() { 
     dateEntered(); 
    } 
})(); 

function dateEntered(){ 
    var userDateEntry = document.getElementById("fm_deliverydate").value; 

    if (hrs >= 10 && userDateEntry == date) { 
     alert("Shipping for today has ended. Your order will arrive tomorrow"); 
     document.getElementById('fm_deliverytime').disabled= true; 
    } 
    else{ 
     document.getElementById('fm_deliverytime').disabled= false; 
    } 
} 
</script> 
1

如果你想onclick事件監聽器添加到HTML,那麼你真的只需要刪除您所附加在你的dateEntered功能的onchange方法,它移動到HTML,其他什麼變化呢。

var date = new Date(); 
var dd = date.getDate(); 
var mm = date.getMonth()+1; 
var yyyy = date.getFullYear(); 
var hrs = date.getHours(); 

if(dd<10) { 
    dd='0'+dd 
} 

if(mm<10) { 
    mm='0'+mm 
} 
date = yyyy+'-'+mm+'-'+dd; 

function dateEntered(){ 
    var userDateEntry = document.getElementById("fm_deliverydate").value; 

    if (hrs >= 10 && userDateEntry == date) { 
     document.getElementById('fm_deliverytime').disabled = true; 
    } else { 
     console.log('shipping enabled'); 
     document.getElementById('fm_deliverytime').disabled = false; 
    }; 
} 

你的HTML應該是這樣的:

<input onchange="dateEntered()" type="date" name="DateName" id="fm_deliverydate" placeholder="yyyy-mm-dd"/> 

<input type="time" name="TimeName" id="fm_deliverytime" placeholder="enter date"/> 

這裏的小提琴:https://jsfiddle.net/o73fze9r/