使用jquery覆盖锚标记的默认行为

时间:2011-03-05 23:33:17

标签: javascript jquery anchor

我试图覆盖锚标记的默认行为,这样我就可以将服务器上的网页加载到现有的div中,而不是新的标签或窗口。

到目前为止,我有:

myContainer.click(function(){                   
                    event.preventDefault();
                    $('a').click(function(){
                        var link = $(this).attr('href');
                        myContainer.load(link);
                    });
            });

在Chrome中,我必须在它执行任何操作之前单击链接两次,在IE中,它根本不起作用并使用新链接刷新页面。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:25)

不应该只是:

 $('a').click(function(e) {
     e.preventDefault(); 
     myContainer.load(this.href);
 });

您的代码在点击处理程序中分配了一个点击处理程序。因此,第一次点击会将点击处理程序附加到链接,第二次点击(在链接上)将执行新的点击处理程序。

您似乎只需要一个点击处理程序。如果动态添加链接,您可以使用.on().live.delegate的后续版本):

myContainer.on('click', 'a', function(e) {
     e.preventDefault(); 
     myContainer.load(this.href);
});

// or

$(document).on('click', 'a', function(e) {
     e.preventDefault(); 
     myContainer.load(this.href);
});

答案 1 :(得分:3)

你忘了通过活动:

myContainer.click(function(event){
event.preventDefault();
 $('a').click(function(){ var link = $(this).attr('href');
 myContainer.load(link);
 });
 });

尝试重新安排它们:

myContainer.ready(function(){
    $('a').click(function(event){
    event.preventDefault();
    var link = $(this).attr('href');
     myContainer.load(link);
     });
     });