ojek
ojek

Reputation: 10068

How to catch all the links, read their attributes and prevent them from executing?

I want to catch all the .click() events that occurs on links on my page. Also, I want to read attributes of a link currently clicked. As far I have this, but there is a problem with it:

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

First of all, this code works only one out of two times - first time I click on a link, this code doesn't work, second click, this code works, third click, doesn't, etc. Why is that? Also, how can I read attributes of a link? I need to read src and class attributes.

Edit: What I need to do, is to catch whenever someone clicks on a link, stop that from happening, read href and class attributes of a link, and then proceed with loading the page (but not reloading, just replacing #myPage)

Edit2: Okay, so now the only problem is, why is it working one out of two times for me? When I load the page, then click a link, jquery works fine, but after second click, it is not hitting my $("a").click() event!

Solution: I fixed my problem by replacing .click() with .live() - now works every time. ;)

Upvotes: 0

Views: 88

Answers (3)

Don Boots
Don Boots

Reputation: 2166

According to http://api.jquery.com/click/ the click() handler is potentially fired twice. Once for mousedown and once for mouseup. Perhaps you can utilize $.on('mouseup', function(e) { }); instead?

For attributes you can use:

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

In summary:

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

Upvotes: 1

Manish Mishra
Manish Mishra

Reputation: 12375

first part: How can I prevent link click:

just return false from your click event

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

Second part: how can I read attribute of a link

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

see this fiddle

Upvotes: 3

Huangism
Huangism

Reputation: 16438

$("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
});

Upvotes: 1

Related Questions