【问题标题】:Chrome specific Javascript scope issueChrome 特定的 Javascript 范围问题
【发布时间】:2013-12-30 19:58:38
【问题描述】:

我在 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() 收到的消息。

我从常规锚标记的 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);
                }
            }

【问题讨论】:

  • 他们有什么错误吗?来自ScheduleCheck()lblpodate_R.Text 的文本是否有可能有一个单引号来终止您的字符串并破坏您的代码?您是否查看了实际呈现的标记以了解代码的外观?
  • 按钮是否在表单内?
  • @cannon:在渲染代码中编辑
  • @EricHerlitz 是的,链接位于表单中。

标签: javascript asp.net google-chrome


【解决方案1】:

您的代码 (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 时启用它,真是太有趣了 :)

【讨论】:

  • 感谢您的验证并为我指明了正确的方向。原来 sql 管理员没有在 vb 函数运行的 sp 上为我们的用户授予执行权限。
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2014-10-24
  • 1970-01-01
相关资源
最近更新 更多