在文档就绪时运行时功能不正常

时间:2016-03-11 04:18:36

标签: javascript jquery

我有一个包含2个字段的表单:日期字段#datefromtoday和天数#daysfromtoday。我使用javascript函数:

1)自动收听今天的日期和(如果有日期)显示从加载页面的今天起的天数

2)在输入/修改天数时从今天开始调整日期。

以下是代码:

 $(document).ready(function (){

 function modifyDays(){ //definy function to modify days
    var endDateToDays = $( "#datefromtoday" ).val();
    var endDateToDays_obj = new Date(endDateToDays); // convert in object
    var endDateToDays_ms = endDateToDays_obj.getTime(); // convert in ms

    var todayDate = new Date(); //
    var todayDate_ms = todayDate.getTime(); //

    var daysFromToday =  parseInt(Math.ceil( (endDateToDays_ms - todayDate_ms) / 1000 / 60 / 60 / 24 ) ) || ''; //if not number display nothing


    document.getElementById("daysfromtoday").value = daysFromToday; //outuput
 }



    modifyDays(); //here is the problem. If I delete this line of code, everything works perfectly


    $("#datefromtoday").on('change', function(){ //run function when modify delay date
        modifyDays();       
    });
 });

问题

modifyDays函数就像on.change事件上的一个魅力一样,但是 何时加载到文档就绪,它会干扰数据表www.datatables.net以及其他脚本,它们不再起作用了......

我可能使用错误的代码在页面加载时调用该函数....任何想法?谢谢你的帮助!!!

3 个答案:

答案 0 :(得分:0)

如果您认为是因为调用main函数,请在html页面的body元素中添加onload属性:

<body onload="loaded()">

并声明加载为主函数:

var loaded = function (){

   function modifyDays(){ //definy function to modify days
       var endDateToDays = $( "#datefromtoday" ).val();
       var endDateToDays_obj = new Date(endDateToDays); // convert in object
       var endDateToDays_ms = endDateToDays_obj.getTime(); // convert in ms

       var todayDate = new Date(); //
       var todayDate_ms = todayDate.getTime(); //

       var daysFromToday =  parseInt(Math.ceil( (endDateToDays_ms - todayDate_ms) / 1000 / 60 / 60 / 24 ) ) || ''; //if not number display nothing


       document.getElementById("daysfromtoday").value = daysFromToday; //outuput
   }



   modifyDays(); //here is the problem. If I delete this line of code, everything works perfectly


   $("#datefromtoday").on('change', function(){ //run function when modify delay date
       modifyDays();       
   });
};

如果问题是如何调用函数,它应该可以工作。

答案 1 :(得分:0)

我不认为问题是因为您在页面加载时调用该函数。错误可能来自函数modifyDays。我看到的唯一依赖是#datefromtoday和#daysfromtoday。当函数在dom ready事件上执行时,检查那些节点是否存在。

答案 2 :(得分:0)

如果函数调用的时间是问题,你可以将modifyDays();调用放在window.setTimeout(modifyDays, 5000);或类似的东西中以延迟它,直到其他脚本完成加载,所以这个代码片段没有& #39; t中断或干扰它们。你可能想在html中放置一个占位符,如果它没有被加载,那么它是否有效。