我有一个包含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以及其他脚本,它们不再起作用了......
我可能使用错误的代码在页面加载时调用该函数....任何想法?谢谢你的帮助!!!
答案 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中放置一个占位符,如果它没有被加载,那么它是否有效。