我想知道这段代码中的错误是什么。我想将今天的日期与用户输入日期进行比较
<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>
我觉得&#34; var r = document.getElementbyid(日期).value;&#34;这段代码不起作用
答案 0 :(得分:1)
函数名称应为:
document.getElementById
(你错过了一些大写字母)
另外,你正在处理document.getElementById(dates).value
的结果,好像它会给你一个Date对象,但它实际上会给你一个字符串 - 你需要在调用getMonth之前将它转换为Date getData / getFullYear就可以了 - this question的答案可以帮到你。
答案 1 :(得分: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;
}
此外,还不完全清楚你要做什么。最后,假设您修复了这些语法错误,您有三个Date变量:
q
,使用当前日期和时间创建。
date
,它刚刚传递了q
中的当前日期和时间。
mydate
,其中也包含当前日期和时间,因为您刚刚传递了q
传递给date
的相同值。
因此,由于您要比较的两个日期对象被设置为相同的日期,因此您将始终警告“更大”(这不是更大,因为它们是相同的,但这是一个单独的问题)。
我也觉得很奇怪,这个验证函数在所有情况下都会返回false
。由于你的if / else语句,没有办法返回true
。对于应该验证某些东西的函数,验证总是返回false似乎很奇怪。
此外,正如@codebox在他的回答中所述,document.getElementById(dates).value
只是返回一个字符串,如果您希望从中读取日期值,则必须将转换转换为新的Date对象它会显示在您的m1
,d1
和y1
变量中(截至目前,它们从未使用过)。
答案 2 :(得分: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;
}