代码之家  ›  专栏  ›  技术社区  ›  Christian Studer delphist

javascript-onload,onclick事件

  •  2
  • Christian Studer delphist  · 技术社区  · 5 年前

    我有一个在页面加载时实例化的方法。方法触发两个事件:window.onload和image.onclick。这个问题在任何时候都只是一个有效的事件(如:如果我发表评论 图像.onclick 方法, 窗口加载 方法有效)。我怎么让两个人都工作?

    这在firefox(mozilla)中很好,但在ie中不行。

    例子

    test.method = function()
    {
        window.onload = this.doSomeWork;
    
        for (i = 0; i < images.length; i++) {
            var image = images[i];
            image.onclick = this.imageClickEvent;
    
        }
    }
    
    5 回复  |  直到 15 年前
        1
  •  1
  •   Tân    15 年前

    问题是你只能有一个加载事件。

    我建议你试试下面的addevent方法:

    http://ejohn.org/projects/flexible-javascript-events/

        2
  •  1
  •   bobince    15 年前

    问题中没有足够的信息来找出问题所在,但需要考虑的是:

    • dosomework()或imageclickevent()中的代码是否期望接收指向任何特定内容的this?因为当您将方法从其所有者对象上剥离以分配给事件处理程序时,它不会。

    • 是否有其他方法正在写入window.onload或image.onclick,您可能正在重写该方法?

        3
  •  0
  •   BuddyJoe    15 年前

    看看firefox 3页面上的代码。然后打开firefox错误控制台(ctrl shift j)查看哪一行正在中断。然后用新的信息更新你的问题。

        4
  •  0
  •   Kent Brewster    15 年前

    也许您应该在这里添加一个事件侦听器,而不是尝试捕获window.onload?

        5
  •  0
  •   Ayyash    15 年前

    在页面加载时启动test.method后,将用一个新值覆盖window.on load:this.dosomework,因此在正文加载的时间范围内,调用第一个函数,然后立即覆盖,然后第二个函数接管并执行…您是否尝试将window.onload语句推到test.method的底部?我猜如果函数块太长,就永远不会执行第二个window.onload,因为窗口已经完成加载,它的毫秒数,但这就是它所需要的全部时间

    显然,在firefox中,这个函数是在被覆盖之前执行的,或者可能被附加到当前的onload中,不确定其技术细节。再次尝试将onload推到底,看看会发生什么

    您不应该在加载主体后调用的任何其他函数中真正调用on load函数,因为无论您多么小心,都不能依赖加载时间框架足够长以包含这两个事件,应该在调用(或完成)body标记之前将其附加到window.onload,以确保捕获事件。

    推荐文章