2015-11-19 69 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/