函数在文档就绪时无法正常工作
function not working properly when run on document ready
>我有一个包含 2 个字段的表单:日期字段 #datefromtoday
和天数#daysfromtoday
。我使用 javascript 函数来:
,并(如果有日期)显示页面加载时从今天开始的天数
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 以及其他脚本,并且它们不再工作......
我可能使用错误的代码在页面加载时调用该函数....有什么想法吗?感谢您的帮助!!
如果你认为是因为调用了 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();
});
};
那么如果问题是函数的调用方式,它应该可以工作。
我认为问题不是因为您在页面加载时调用该函数。错误可能来自函数 modifyDays 内部。我看到的唯一依赖性是 #datefromtoday 和 #daysfromtoday。检查当函数在 dom ready 事件上执行时,这些节点是否存在。
如果函数调用的计时有问题,您可以将modifyDays();
调用放在window.setTimeout(modifyDays, 5000);
或类似的东西中,以延迟它,直到其他脚本完成加载,这样这个代码段就不会中断或干扰它们。如果这有效,您可能希望在 html 中放置一个占位符
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作