Opera忽略.live()事件处理程序

m.e*_*son 8 javascript jquery opera

我有以下jQuery适用于 Opera 之外的所有主流浏览器:

jQuery(document).ready(function () {

      jQuery("#GetResults").live("click", function(e){
            e.preventDefault(); //Opera doesn't execute anything here
      });

};
Run Code Online (Sandbox Code Playgroud)

单击以下链接时应该触发:

<a id="GetResults" href="Folder/File/javascript:void(0);">Get Results</a>
Run Code Online (Sandbox Code Playgroud)

只有Opera忽略了这个.有任何想法吗?

编辑:

我刚刚发现如果我用.bind()代替.live(),一切都按预期运行.我找不到任何与Opera中的.live()错误相关的文档,它确实在jsFiddle 中工作,它指向环境的东西.可能导致这种行为的原因是什么?

nau*_*tur 7

这需要澄清.上面的答案是正确的,但没有人清楚地解释你的问题来自哪里.

事实上,我认为您可能也可以在其他浏览器中重现该问题.这是因为.live工作原理:

它与事件绑定document并等待特定事件冒泡到那里.然后它检查event.target你是否想要处理.*

如果单击链接元素,则在事件冒泡到足以触发代码之前,浏览器很可能会转到新页面.在具有大量HTML和事件处理程序的应用程序中,所有浏览器都应该有问题.在这种情况下,Opera只是开始显示新页面并破坏前一个更快的页面.它实际上取决于特定情况而不是浏览器.例如:如果在连接到站点时网络延迟较高,则可能不会发生这种情况.

为了防止对a你必须使用的元素进行默认操作,.bind就像过去一样;)当一个eveloper必须知道他用AJAX加载什么并将新事件绑定到回调中时.

*还有更多,.live更复杂.我刚才描述了这里需要什么.


Дам*_*чев 6

使用以下方法附加处理程序时会发生什么

$ (something).bind ("click", function (e) {
    // do something
})
Run Code Online (Sandbox Code Playgroud)

您还可以尝试使用.click()方法附加处理程序.


kle*_*had 2

阅读这篇文章。尝试使用委托代替