【问题标题】:Returned AJAX html breaks IE click events返回的 AJAX html 中断 IE 点击事件
【发布时间】:2009-05-30 01:32:04
【问题描述】:

我有一个分页数据表,以及一个动态创建的分页器(服务器端 AJAX 调用,将返回的 HTML 应用于 div 的 innerHTML)。 当我在寻呼机上单击下一页时,将向服务器发送一个 AJAX 调用以检索下一组数据,该数据以 HTML 字符串的形式返回。我解析 HTML 并呈现新的表格行。我还检索寻呼机 HTML 并将其加载到其父 DIV innerHTML 中。到目前为止没有问题。

在 Firefox 中,我可以单击寻呼机,我的所有 javascript 函数都将正常执行。在 IE 中,我的第一次点击现在不会注册,但第二次点击会执行预期的操作。

什么是 IE 禁用了我返回的 HTML 的首次点击?

【问题讨论】:

  • 页面链接的结构如何?是内联 onclick="" 还是与代码挂钩?
  • 你验证过第一次点击没有发送服务器请求吗?例如在 Fiddler 中?
  • @Diodeus - 该页面已在代码中连接 - 我在其父 div 上设置了一个事件侦听器。 AJAX 响应不会更改父 div,但其中包含的分页 HTML 会更改。 @crescentfresh - 好电话,显然数据回来了,但我的回调
  • 您可以将此解决方案作为您问题的“答案”发布,等待两天,然后接受它...这可能使解决方案独立于问题而获得投票...

标签: javascript html ajax internet-explorer


【解决方案1】:

我不确定您的问题是否与我在回发时遇到的问题有关,但我使用的一些 AJAX 库在页面中插入了额外的控件,导致我的链接中生成的 ID 不再匹配直到服务器为回发事件所期望的 ID。

事件正在触发,但是当事件被连接时,点击的链接和侦听器期望的链接对象之间的 ID 不匹配。

但是,在第一次点击后,回发会导致 ID 重新同步,然后第二次点击就能匹配 ID。

我发现这一点的方法是在第一次点击之前和之后检查链接中的 ID。

再说一次,我不确定这就是发生在你身上的事情。症状相似,但在我的情况下,Firefox 和 IE 都失败了。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    原来我有一个竞争条件。在我从服务器获得响应之前,库(内部编码)正在调用我的回调函数。结果,我的回调函数都没有做任何事情,因为我没有传递有效的值。我设置了一个循环,每十毫秒检查一次值,否则请等待。我从这里修改了教程:

    http://wonko.com/post/how-to-prevent-yui-get-race-conditions

    【讨论】:

    • 我想指出(三年后),使用超时不是处理此问题的好方法。感觉设置和监听事件会更加可靠。但是,由于我不再知道这个问题是关于什么的,所以我将保持原样。
    【解决方案3】:

    您的寻呼机超链接是否将“#”作为href,并且您的 JavaScript onclick 事件处理程序是否返回 false

    我之前在 IE 中看到过这个问题,如果您没有从事件处理程序返回 false,那么第一次单击将跟随超链接(返回同一页面),但随后的单击将起作用,因为该页面已经访问过。

    【讨论】:

      【解决方案4】:

      如果您有竞争条件,您可能需要认真重新考虑您的方法,而不是设置计时器。

      分页数据是一系列格式相似的项目吗?您可能需要考虑退回到 DOM 级别,删除容器的子元素并在 DOM 中重建它们。在我的分页脚本上,我请求一个 JSON 字符串,然后由请求页面解析。结果是一个对象数组,我可以循环并添加到容器中。它还有助于减少脚本注入的可能性(在处理任何类型的用户提供的内容时,innerHTML 是出了名的危险)。

      【讨论】:

        猜你喜欢
        • 2020-04-30
        • 2013-04-20
        • 2012-06-26
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        相关资源
        最近更新 更多