Reputation: 155
I have a date input field. I am struggling to get another input field to disable if the date selected is today. I am assuming that it's because the JS is not handling the input after it is entered.
Here it is:
<input type="date" name="DateName" id="inputID" onkeydown="dateEntered(this)" />
<input type="time" name="TimeName" id="inputTime" />
<script>
var date = new Date();
var dd = date.getDate();
var mm = date.getMonth()+1;
var yyyy = date.getFullYear();
var hrs = date.getHours();
var userDateEntry = document.getElementById('inputID').value;
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
date = yyyy+'-'+mm+'-'+dd;
function dateEntered(){
if (hrs >= 10 && userDateEntry == date) {
alert("Shipping for today has ended. Your order will arrive tomorrow");
document.getElementById('inputTime').disabled= true;
}
else{
document.getElementById('inputTime').disabled= false;
}
}
</script>
Upvotes: 0
Views: 74
Reputation: 9691
You need to get the value once its entered so you need that inside the dateEntered function and instead of keydown I would use onblur (when the field loses focus). Also since you pass this
you can use that inside your function.
Fiddle: http://jsfiddle.net/pv5e76dv/3/
HTML:
<input type="date" name="DateName" id="inputID" onblur="dateEntered(this)"/>
<input type="time" name="TimeName" id="inputTime" />
JS:
function dateEntered(element){
var date = new Date();
var dd = date.getDate();
var mm = date.getMonth() + 1;
var yyyy = date.getFullYear();
var hrs = date.getHours();
var userDateEntry = element.value;
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
date = yyyy+'-'+mm+'-'+dd;
if (hrs >= 10 && userDateEntry == date) {
alert("Shipping for today has ended. Your order will arrive tomorrow");
document.getElementById('inputTime').disabled= true;
}
else{
document.getElementById('inputTime').disabled= false;
}
}
Upvotes: 0
Reputation: 35670
Move this inside the function:
var userDateEntry = document.getElementById('inputID').value;
Otherwise, it never gets updated with the current value.
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('inputID').value;
if (hrs >= 10 && userDateEntry == date) {
alert("Shipping for today has ended. Your order will arrive tomorrow");
document.getElementById('inputTime').disabled= true;
}
else{
document.getElementById('inputTime').disabled= false;
}
}
<input type="date" name="DateName" id="inputID" onkeydown="dateEntered(this)" />
<input type="time" name="TimeName" id="inputTime" />
Upvotes: 0
Reputation: 22911
You should use the onchange
event. This should work for you:
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(obj){
var userDateEntry = obj.value;
if (hrs >= 10 && userDateEntry == date) {
alert("Shipping for today has ended. Your order will arrive tomorrow");
document.getElementById('inputTime').disabled= true;
}
else{
document.getElementById('inputTime').disabled= false;
}
}
<input type="date" name="DateName" id="inputID" onchange="dateEntered(this)" />
<input type="time" name="TimeName" id="inputTime" />
Upvotes: 3