2014-12-11 115 views
0

似乎无法找到问题。每次运行它时,我都会得到NaN的ageDale,一直在看它一会儿,它可能很简单,但我很感谢帮助!Javascript简单代码错误

<p>Enter names in the fields, then click "Submit" to submit the form:</p> 
<form name="form"> 
    <input type="text" id="birthDate"> 

    Current Date 
    <input type="text" id="currentDate"> 

    <a id="Submit_Button" onclick="test();" href="javascript:void(0);" title="Submit">Submit</a> 
</form> 
<script> 
    function test() { 
     var birthDate = document.getElementById("birthDate"); 
     var currentDate = document.getElementById("currentDate"); 
     var ageDate  = (birthDate.value - currentDate.value); 

     if(ageDate.value < 1) { 
      (ageDale = ageDate.value * -1) 
     } 
     else { 
      (ageDale = ageDate.value * 1) 
     } 

     alert(ageDale) 
    } 
    </script> 

另外,是否有必要有这样的声明?还是有另一种方式来设置它,因此它不需要?

+3

拼错变量名。尝试'ageDate'而不是'ageDale'。 – orange 2014-12-11 01:14:54

+2

你没有说明代码应该做什么,但你的NaN来自两个字符串使用减法运算符'(birthDate.value - currentDate.value)' – styfle 2014-12-11 01:15:55

+1

@styfle JS使用算术时将字符串转换为数字功能。 – Barmar 2014-12-11 01:16:18

回答

2

ageDate.value 

应该

ageDate 

。这是一个变量,并且已经包含仅从

birthDate.value - currentDate.value 

if(ageDate.value < 1) { 
     //^here 
      (ageDale = ageDate.value * -1) 
     }      //^ here 
     else { 
      (ageDale = ageDate.value * 1) 
          //^and here 

,您只需要,例如,输入字段中获取数据时获取的差值。

另外(取决于您如何输入它们),计算日期可能会有问题。出于调试的目的,您应该使用

console.log() 

您的变量值,这样您可以快速找出错误的位置。

一个好去处的console.log()在你的代码会是这样,例如该块后:

var birthDate = document.getElementById("birthDate"); 
    var currentDate = document.getElementById("currentDate"); 
    var ageDate  = (birthDate.value - currentDate.value); 

    console.log(ageDate); 

旁注:

你可能想看看moment.js,这将帮助您进行日期计算。例如,你可以得到moment.js日期之间的差异是这样的:

var a = moment([2014, 12, 05]); 
var b = moment([2014, 12, 06]); 
a.diff(b, 'days') // 1 
1

试试这个:

var btn = document.getElementById("Submit_Button"); 

btn.onclick = function test() { 
    var birthDate = parseInt(document.getElementById("birthDate").value); 
    var currentDate = parseInt(document.getElementById("currentDate").value); 
    var ageDate  = (birthDate - currentDate); 

    if(ageDate < 1) { 
     (ageDate = ageDate * -1) 
    } 
    else { 
     (ageDate = ageDate * 1) 
    } 

    alert(ageDate) 
} 
0

只是修改此代码

var birthDate = document.getElementById("birthDate"); 
    var currentDate = document.getElementById("currentDate"); 
    var ageDate  = (birthDate.value - currentDate.value); 

    if(ageDate.value < 1) { 
     (ageDale = ageDate.value * -1) 
    } 
    else { 
     (ageDale = ageDate.value * 1) 
    } 

与此

var vbirthdate = new Date(document.getElementById("birthDate").value); 
    var vcurrentdate = new Date(document.getElementById("currentDate").value); 
    var ageDate  = Math.floor((vbirthdate-vcurrentdate)/(1000*60*60*24)); 

    if(ageDate < 1) { 
     (ageDate = ageDate * -1) 
    } // no need to do something like this (ageDate *1) if it is already a positive number, just check if it's a negative then convert it to a positive number 

你可以尝试t他在http://jsfiddle.net/kapasaja/duco4cqa/5/

码是什么,你问的是类似this post

1

正如baao说,你有拼写错误。纠正这些后,你想考虑你的输入是什么,并确保你正在检查输入是否有效。例如,如果我为我的生日键入“9月10日”,为当前日期键入“12月10日”,则函数将尝试并扣除两个无效的字符串。如果您打算为日期使用自定义输入字段,则需要确保它的格式一致且可解析。

我建议以特定的格式请求他们的生日,并从那里解析它,因为我们可以使用Javascript轻松获取当前日期。例如,mm-dd-yy。我们可以将其重新写为:

function test() { 
 

 
//lets get the date, in the format 'mm-dd-yy'. You'd want to do error checking at some point if you're serious about it 
 
    
 
var dateInput = document.getElementById("birthDate").value; 
 

 
//get each individal date type by splitting them at the -, giving ['dd', 'mm', 'yy'] 
 
var dateSplit = dateInput.split('-'); 
 
    
 
    //create a Javascript date object with the date we got 
 
    var birthDate = new Date(dateSplit[2], dateSplit[0], dateSplit[1]); 
 
    
 
    //create another with the current date and time 
 
    var currentDate = new Date(); 
 
    
 
    // find the difference in milliseconds 
 
    
 
    var dateDifference = Math.abs(birthDate.getTime() - currentDate.getTime()); 
 
    
 
    // convert to years 
 
    var age = dateDifference/(1000 * 3600 * 24 * 365); 
 
    
 
    alert(age); 
 

 
}
<p>Enter names in the fields, then click "Submit" to submit the form:</p> 
 
<form name="form"> 
 
    Birth Date (dd-mm-yy): 
 
    <br> 
 
    <input type="text" id="birthDate"> 
 
    <br> 
 
    <a id="Submit_Button" onclick="test();" href="javascript:void(0);" title="Submit">Submit</a> 
 
</form>