Jquery在IE中的live方法无法正常工作

3

我有一些代码在Firefox中可以正常工作,但在IE中不行。我已经阅读了其他帖子,说Jquery的live方法不支持change事件,但我正在使用click事件。这是我的代码,它在$(document).ready(function()中:

$("a").live("click", function(e) { 
        alert("link clicked");
        //do stuff
    });

如果在FF中,警报会被触发但在IE中不会。当我使用$("a").click时,它可以正常工作,问题是我需要将该函数应用于页面首次加载时不存在的链接(它们将通过ajax调用在稍后阶段创建)。
我有什么选择?我们正在使用jquery-1.4.1.min.js。
提前感谢。
2个回答

2
如果这些链接在特定的内容中,您可以使用以下方法:

如果这些链接在特定的内容中,您可以使用:

$('#link_container_id').delegate('a', 'click', function(e){
   alert('link clicked');
});

.delegate()会监视是否有任何事件(在您的情况下为单击)冒泡,如果是,则检查目标并将其与您的情况下的“a”进行比较。应该可以工作,但未经测试。


可以为整个页面指定吗? - Kaskade
它应该使用$(document.body).delegate()这样的语法。 - jAndy
1
@jAndy - 这几乎与使用.live()相同, $(document) 将是完全相同的,不确定这如何解决不发生冒泡的问题。 - Nick Craver
绑定函数在FF中使用.live()可以正常工作,但在IE中无法正常工作。我正在测试这个问题,稍后会更新。 - Kaskade
@Nick - 是的,那基本上是真的,实际上它们是一样的。也许我没有正确理解问题。在IE中,这两种方法对于动态创建的锚点都可以正常工作。 - jAndy
1
谢谢Andy,那个方法可行,虽然我不知道为什么.live不起作用,但只要有一个可行的解决方案就好了! - Kaskade

1

在附加live事件时,元素应该存在于DOM中。如果稍后它们被重新创建(例如在ajax回调中),则无需再次附加事件处理程序。如果元素在页面加载时不存在,则可以在它们加载时附加live事件,但如果这样做,则可能不再需要live事件,因为您可以直接附加click事件。


1
我完全不明白你的意思。我正在处理一个大型项目,无法完全掌控所有代码。我需要在每个“a”被点击时调用一个方法。当我使用click事件时,一些链接(那些因为加载时间较长而在页面加载后才加载的链接)无法被jquery click捕获。当我使用live时可以运行,但是在IE中无法工作。我必须使用jquery来拦截所有链接,因为我无法访问包含链接本身的代码。希望这有意义。 - Kaskade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接