我在 ASPX 页面的头部定义了一个 javascript 函数:
<script type="text/javascript" >
function bdScheduler() {
var CanRun = '<%= ScheduleCheck() %>';
if ('Success' == CanRun) {
bcal = window.open('ProjSchedBckwdCalc.aspx?po_rec=<%= lblpodate_R.Text %>', '', 'width=650px, height=750px');
} else {
alert(CanRun);
}
}
</script>
ScheduleCheck()
是在我的代码后面定义的一个函数,它按预期检查依赖性并返回一个字符串,指示页面“ProjSchedBckwdCalc.aspx”是否可以完成其工作。如果“成功”,那么我们会在所需位置弹出一个窗口,并向其传递当前页面标签中的值。否则,我们会收到从 ScheduleCheck()
返回的消息。
我从常规 anchor 标记的 onclick 事件中调用它:
<a href="#" onclick="bdScheduler();" >Backward Scheduler</a>
发布的代码在当前版本和之前的几个版本的 Firefox、Chrome 和 IE 中适用,但我收到用户报告,该按钮没有任何作用。我检查了一下,它们都使用 Chrome(与我的测试机上的版本相同),控制台显示浏览器看不到 bdScheduler()
。
我的问题分为两部分:为什么某些 Chrome 安装在相同的版本中处理此问题的方式不同?我可以更改什么才能使其不仅表现一致,而且运行所需的功能并检查何时运行?
编辑:渲染代码:
function bdScheduler() {
var CanRun = 'Success';
if ('Success' == CanRun) {
bcal = window.open('ProjSchedBckwdCalc.aspx?po_rec=12/23/2013', '', 'width=650px, height=750px');
} else {
alert(CanRun);
}
}
最佳答案
您的代码没有任何问题( http://jsfiddle.net/N3Unt/6/ ),我已经在三台不同的 Mac 上、Windows 7 和 8 以及可用的 FF/IE 上的 Chrome 中进行了测试。
您始终必须做的是确保加载所有代码并且不缓存任何内容。执行“onclicks”的正确且更现代的方法是使用称为事件处理的解耦模式
document.addEventListener('DOMContentLoaded', function() {
var link = document.getElementById('yourOnClickLink');
// onClick's logic:
link.addEventListener('click', function() {
var CanRun = '<%= ScheduleCheck() %>';
if ('Success' == CanRun) {
// Warning, bcal becomes global using this code (ANTIPATTERN)
bcal = window.open('ProjSchedBckwdCalc.aspx?po_rec=12/23/2013', '', 'width=650px, height=750px');
} else {
alert(CanRun);
}
});
});
这可以确保所有内容都正确加载,并且您的页面可以异步加载。为什么不灰显任何连接到事件处理程序的链接并在加载 DOM 时启用它,啊,太有趣了:)
关于javascript - Chrome 特定的 Javascript 范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846564/