jquery: get the object name?

58.7k views Asked by At

I am trying to retrieve the clicked object name through the code below, but I get [object object] only, how can I get the object name?

<a href="#" class="clickme">click</a>

    $('.clickme').click(function(){
      alert($(this));
      return false;
    });

I would like to get '.clickme' as my object name.

Thanks.

EDIT:

thanks for the help guys. sorry that for not being clear.

I want to get the object name dynamically when I turn this jquery click() into a customised function or a plugin.

so,

<a href="#" class="clickme">click</a>

        $('.clickme').click(function(){
          alert($(this));
          return false;
        });

I would like to get '.clickme' as my object name.

and,

<a href="#" id="clickme">click</a>

        $('#clickme').click(function(){
          alert($(this));
          return false;
        });

I would like to get '#clickme' as my object name.

so you notice sometime I want to get id name but sometime I want to get the class name as the object name.

5

There are 5 answers

1
mVChr On BEST ANSWER

jQuery does have an internal property selector that can be used to find what you're looking for:

$('.clickme').selector == '.clickme';
$('.clickme').find('a').selector == '.clickme a';

However you can't access this within the click(function(e){}) since you have to reselect using this:

$('.clickme').click(function(e){
  alert($(this).selector); // alerts nothing
});

However, when you create the click function you can assign that element to a variable and reference it within:

var $cm = $('.clickme').click(function(e){
  alert($cm.selector); // alerts '.clickme'
});
0
ThiefMaster On

That's the class. Not the object name and certainly nothing unique.

You can get it using this.className or $(this).attr('class').

If you want something unique, use the id attribute and replace class with id.

1
tvanfosson On

Name or id?

 $('.clickme').click(function(){
  alert( this.id );  // or $(this).attr('name') if you want the name
  return false;
});

What it really looks like is that you want the class (though, I'm not sure why since you've used the class as the selector).

 $('.clickme').click(function(){
  alert( $(this).attr('class') );
  return false;
});
1
Quincy On

an alternative using the event object

$('.clickme').click(function(e){
  alert($(e.target).attr('class'));
  return false;
});
0
Le Droid On

This doesn't responds to the exact question but to the one I got when I get there - So you too maybe ;-)

Short answer: use "this.name" which is the same than "$(this).attr('name')"

Sample:

$("*").click(function (event) {
   event.stopPropagation();
   // Display the name of the clicked object
   $(this).after("<span> " + this.name +" clicked! </span>");
   // Change the name for what you want (optional - just to show it's doable)
   this.name = this.name + "X";
});