JavaScript - onClick to get the ID of the clicked

2018-12-31 14:17发布

问题:

How do find the id of the button which is being clicked?

<button id=\"1\" onClick=\"reply_click()\"></button>
<button id=\"2\" onClick=\"reply_click()\"></button>
<button id=\"3\" onClick=\"reply_click()\"></button>

function reply_click()
{
}

回答1:

You need to send the ID as the function parameters. Do it like this:

<button id=\"1\" onClick=\"reply_click(this.id)\">B1</button>
<button id=\"2\" onClick=\"reply_click(this.id)\">B2</button>
<button id=\"3\" onClick=\"reply_click(this.id)\">B3</button>

<script type=\"text/javascript\">
function reply_click(clicked_id)
{
    alert(clicked_id);
}
</script>

This will send the ID this.id as clicked_id which you can use in your function. See it in action here.



回答2:

In general, things are easier to keep organized if you separate your code and your markup. Define all of your elements, and then in your JavaScript section, define the various actions that should be performed on those elements.

When an event handler is called, it\'s called within the context of the element that was clicked on. So, the identifier this will refer to the DOM element that you clicked on. You can then access attributes of the element through that identifier.

For example:

<button id=\"1\">Button 1</button>
<button id=\"2\">Button 2</button>
<button id=\"3\">Button 3</button>

<script type=\"text/javascript\">
var reply_click = function()
{
    alert(\"Button clicked, id \"+this.id+\", text\"+this.innerHTML);
}
document.getElementById(\'1\').onclick = reply_click;
document.getElementById(\'2\').onclick = reply_click;
document.getElementById(\'3\').onclick = reply_click;
</script>


回答3:

(I think the id attribute needs to start with a letter. Could be wrong.)

You could go for event delegation...

<div onClick=\"reply_click()\">
    <button id=\"1\"></button>
    <button id=\"2\"></button>
    <button id=\"3\"></button>
</div>

function reply_click(e) {
    e = e || window.event;
    e = e.target || e.srcElement;
    if (e.nodeName === \'BUTTON\') {
        alert(e.id);
    }
}

...but that requires you to be relatively comfortable with the wacky event model.



回答4:

USING PURE JAVASCRIPT: I know it\'s late but may be for the future people it can help:

In the HTML part:

<button id=\"1\" onClick=\"reply_click()\"></button>
<button id=\"2\" onClick=\"reply_click()\"></button>
<button id=\"3\" onClick=\"reply_click()\"></button>

In the Javascipt Controller:

function reply_click()
{
    alert(event.srcElement.id);
}

This way we don\'t have to bind the \'id\' of the Element at the time of calling the javascript function.



回答5:

<button id=\"1\" onClick=\"reply_click(this)\"></button>
<button id=\"2\" onClick=\"reply_click(this)\"></button>
<button id=\"3\" onClick=\"reply_click(this)\"></button>

function reply_click(obj)
{
var id = obj.id;
}


回答6:

<button id=\"1\" class=\"clickMe\"></button>
<button id=\"2\" class=\"clickMe\"></button>
<button id=\"3\" class=\"clickMe\"></button>

<script>
$(\'.clickMe\').click(function(){
    alert(this.id);
});
</script>


回答7:

How to do it without inline JavaScript

it is generally recommended to avoid inline JavaScript, but rarely is there an example of how to do it.
Here is my way of attaching events to buttons.
I\'m not entirely happy with how much longer the recommended method is compared to a simple onClick attribute.

Modern browsers only

<!DOCTYPE html>
<html>
<head>
<script>
(function(doc){
    var hasClass = function(el,className) {
        return (\' \' + el.className + \' \').indexOf(\' \' + className + \' \') > -1;
    }
    doc.addEventListener(\'click\', function(e){
      if(hasClass(e.target, \'click-me\')){
          e.preventDefault();
          doSomething.call(e.target, e);
      }
    });
})(document);

function insertHTML(str){
  var s = document.getElementsByTagName(\'script\'), lastScript = s[s.length-1];
  lastScript.insertAdjacentHTML(\"beforebegin\", str);
}

function doSomething(event){
  console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script>
insertHTML(\'<button class=\"click-me\" id=\"btn1\">Button 1</button>\');
</script>

<!--Use this when you don\'t care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class=\"click-me\" id=\"btn2\">Button 2</button>
<input class=\"click-me\" type=\"button\" value=\"Button 3\" id=\"btn3\">

<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class=\"click-me\" href=\"/path/to/non-js/action\" id=\"btn4\">Button 4</a>

</body>
</html>

Cross-browser

<!DOCTYPE html>
<html>
<head>
<script type=\"text/javascript\">
(function(doc){
    var cb_addEventListener = function(obj, evt, fnc) {
        // W3C model
        if (obj.addEventListener) {
            obj.addEventListener(evt, fnc, false);
            return true;
        } 
        // Microsoft model
        else if (obj.attachEvent) {
            return obj.attachEvent(\'on\' + evt, fnc);
        }
        // Browser don\'t support W3C or MSFT model, go on with traditional
        else {
            evt = \'on\'+evt;
            if(typeof obj[evt] === \'function\'){
                // Object already has a function on traditional
                // Let\'s wrap it with our own function inside another function
                fnc = (function(f1,f2){
                    return function(){
                        f1.apply(this,arguments);
                        f2.apply(this,arguments);
                    }
                })(obj[evt], fnc);
            }
            obj[evt] = fnc;
            return true;
        }
        return false;
    };
    var hasClass = function(el,className) {
        return (\' \' + el.className + \' \').indexOf(\' \' + className + \' \') > -1;
    }

    cb_addEventListener(doc, \'click\', function(e){
      if(hasClass(e.target, \'click-me\')){
          e.preventDefault ? e.preventDefault() : e.returnValue = false;
          doSomething.call(e.target, e);
      }
    });
})(document);

function insertHTML(str){
  var s = document.getElementsByTagName(\'script\'), lastScript = s[s.length-1];
  lastScript.insertAdjacentHTML(\"beforebegin\", str);
}

function doSomething(event){
  console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type=\"text/javascript\">
insertHTML(\'<button class=\"click-me\" id=\"btn1\">Button 1</button>\');
</script>

<!--Use this when you don\'t care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class=\"click-me\" id=\"btn2\">Button 2</button>
<input class=\"click-me\" type=\"button\" value=\"Button 3\" id=\"btn3\">

<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class=\"click-me\" href=\"/path/to/non-js/action\" id=\"btn4\">Button 4</a>

</body>
</html>

Cross-browser with jQuery

<!DOCTYPE html>
<html>
<head>
<script type=\"text/javascript\">
(function($){
    $(document).on(\'click\', \'.click-me\', function(e){
      doSomething.call(this, e);
    });
})(jQuery);

function insertHTML(str){
  var s = document.getElementsByTagName(\'script\'), lastScript = s[s.length-1];
  lastScript.insertAdjacentHTML(\"beforebegin\", str);
}

function doSomething(event){
  console.log(this.id); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--Best if you inject the button element with javascript if you plan to support users with javascript disabled-->
<script type=\"text/javascript\">
insertHTML(\'<button class=\"click-me\" id=\"btn1\">Button 1</button>\');
</script>

<!--Use this when you don\'t care about broken buttons when javascript is disabled.-->
<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class=\"click-me\" id=\"btn2\">Button 2</button>
<input class=\"click-me\" type=\"button\" value=\"Button 3\" id=\"btn3\">

<!--Use this when you want to lead the user somewhere when javascript is disabled-->
<a class=\"click-me\" href=\"/path/to/non-js/action\" id=\"btn4\">Button 4</a>

</body>
</html>

You can run this before the document is ready, clicking the buttons will work because we attach the event to the document.

Here is a jsfiddle
For some strange reason the insertHTML function does not work in it even though it works in all my browsers.

You can always replace insertHTML with document.write if you don\'t mind it\'s drawbacks

<script>
document.write(\'<button class=\"click-me\" id=\"btn1\">Button 1</button>\');
</script>

Sources:

  • What are alternatives to document.write?
  • Test if an element contains a class?
  • event.preventDefault() function not working in IE
  • https://gist.github.com/eduardocereto/955642


回答8:

With pure javascript you can do the following:

var buttons = document.getElementsByTagName(\"button\");
var buttonsCount = buttons.length;
for (var i = 0; i < buttonsCount; i += 1) {
    buttons[i].onclick = function(e) {
        alert(this.id);
    };
}​

check it On JsFiddle



回答9:

You can simply do it this way:

<input type=\"button\" id=\"1234\" onclick=\"showId(this.id)\" value=\"click me to show my id\"/>
<script type=\"text/javascript\">
   function showId(obj) {
        var id=obj;
        alert(id);
   }



回答10:

<button id=\"1\" onClick=\"reply_click()\"></button>
<button id=\"2\" onClick=\"reply_click()\"></button>
<button id=\"3\" onClick=\"reply_click()\"></button>

function reply_click()
{
   console.log(window.event.target.id)
}


回答11:

 <button id=\"1\"class=\"clickMe\"></button>

<button id=\"2\" class=\"clickMe\"></button>

<button id=\"3\" class=\"clickMe\"></button>



$(\'.clickMe\').live(\'click\',function(){

var clickedID = this.id;

});


回答12:

Button 1 Button 2 Button 3

var reply_click = function() { 
     alert(\"Button clicked, id \"+this.id+\", text\"+this.innerHTML); 
} 
document.getElementById(\'1\').onclick = reply_click; 
document.getElementById(\'2\').onclick = reply_click; 
document.getElementById(\'3\').onclick = reply_click;


回答13:

If you don\'t want to pass any arguments to the onclick function, just use event.target to get the clicked element:

<button id=\"1\" onClick=\"reply_click()\"></button>
<button id=\"2\" onClick=\"reply_click()\"></button>
<button id=\"3\" onClick=\"reply_click()\"></button>

function reply_click()
{
    // event.target is the element that is clicked (button in this case).
    console.log(event.target.id);
}


回答14:

Sorry its a late answer but its really quick if you do this :-

$(document).ready(function() {
  $(\'button\').on(\'click\', function() {
     alert (this.id);
  });
});

This gets the ID of any button clicked.

If you want to just get value of button clicked in a certain place, just put them in container like

<div id = \"myButtons\"> buttons here </div>

and change the code to :-

 $(document).ready(function() {
      $(\'.myButtons button\').on(\'click\', function() {
         alert (this.id);
      });
    });

I hope this helps