如何捕获所有链接,读取它们的属性并阻止它们执行?

时间:2013-03-25 20:35:39

标签: javascript jquery html

我想要捕获页面上链接上发生的所有.click()个事件。另外,我想读取当前点击的链接的属性。到目前为止,我有这个,但它有一个问题:

$("a").click(function (e) {
    e.preventDefault();
    $("#myPage").load("/ #myPage");
});

首先,这段代码只能工作两次 - 第一次点击链接,这段代码不起作用,第二次点击,这段代码有效,第三次点击,没有等等。为什么是那?另外,我如何读取链接的属性?我需要读取src和class属性。

编辑我需要做的是,只要有人点击某个链接,停止发生这种情况,读取链接的href和类属性,然后继续加载页面(但没有重新加载,只是替换#myPage)

编辑2:好的,现在唯一的问题是,为什么它会为我工作两次?当我加载页面,然后单击一个链接,jquery工作正常,但在第二次点击后,它没有击中我的$("a").click()事件!

解决方案:我通过将.click()替换为.live()来解决我的问题 - 现在每次都可以使用。 ;)

3 个答案:

答案 0 :(得分:3)

第一部分:How can I prevent link click:

从您的点击事件中返回false

$("a").click(function(e) { return false; });

第二部分:how can I read attribute of a link

   $("a").click(function(){
              var href= $(this).attr('href');
              alert(href);
              return false;
      });

请参阅此fiddle

答案 1 :(得分:1)

$("a").on('click', function(e) {

    // stop click event
    e.preventDefault();

    // get href attribute of currently clicked item
    var hrefAttr = $(this).attr('href');

    // get class attribute
    var classAttr = $(this).attr('class');

    // do loading here
});

答案 2 :(得分:1)

根据http://api.jquery.com/click/,click()处理程序可能被触发两次。一次用于mousedown,一次用于mouseup。也许你可以使用$ .on('mouseup',function(e){});代替?

对于您可以使用的属性:

$('a').attr('src');

总结:

$("a").on('mouseup', function (e) {
    e.preventDefault();
    var src = $(this).attr('src');
    $("#myPage").load("/#myPage");
});