我想知道这段代码中的错误是什么。我想将今天的日期与用户输入的日期进行比较
<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>
我觉得"var r=document.getElementbyid(dates).value;"这段代码在上不起作用
函数名称应为:
document.getElementById
(你漏掉了一些大写字母)
此外,您将document.getElementById(dates).value
的结果视为它将返回一个Date对象,但它实际上会返回一个字符串-您需要将其转换为Date,然后才能对其调用getMonth/getData/getFullYear-这个问题的答案应该会对您有所帮助。
我在代码中主要错误的地方放了注释。
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;
}
此外,还不完全清楚你想做什么。最后,假设你修复了这些语法错误,你有三个日期变量:
q
,它是用当前日期和时间创建的。date
,它刚刚经过与q
中相同的当前日期和时间。mydate
,它。。。还保存当前日期和时间,因为您刚刚从q
传递给它的值与传递给date
的值相同。
因此,由于您正在比较的两个日期对象被设置为相同的日期,您将始终提醒"更大"(这并不是真正的更大,因为它们是相等的,但这是一个单独的问题)。
我还觉得奇怪的是,这个验证函数在所有情况下都返回false
。由于您的if/else语句,无法返回true
。对于一个本应验证某些内容的函数,验证总是返回false似乎很奇怪。
此外,正如@codebox在他的回答中所说,document.getElementById(dates).value
只是返回一个字符串,如果您希望将其中的日期值读取到m1
、d1
和y1
变量中(到目前为止,这些变量从未使用过),则必须将其转换为新的Date对象。
您有几个打字错误和逻辑错误。这个代码应该可以工作。
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;
}