Javascript: How to make a Control send itself in a method

纵然是瞬间 提交于 2019-12-13 12:23:36

问题


<a href="" id="someId" onclick="SomeMethod(self);"></a>

Where SomeMethod could have:

function SomeMethod(item)
{
  item.setAttribute('name', item.id);
}

Instead of:

function SomeMethod(itemId)
{
  var someItem;

  someItem = document.getElementById(itemId);
  someItem .setAttribute('name', someItem .id);

}

Silly example, but the idea is not to send in the id itself, but the actual control calling the method. I swear this can be done but have had no luck searching... partially because I'm not even sure what to search on.

I thought it was self, but self doesn't seem to be what I want when the script I have runs.


回答1:


Use the this Keyword.

<a href="" id="someId" onclick="SomeMethod(this);"></a>



回答2:


You actually don't need to pass this as an argument to your function, because you've got a click event object that you can access. So:

<a href="" id="someId" onclick="clickEventHandler()"></a>
<script>
function clickEventHandler(event) {

    if (!event) {
        event = window.event; // Older versions of IE use 
                              // a global reference 
                              // and not an argument.
    };

    var el = (event.target || event.srcElement); // DOM uses 'target';
                                                 // older versions of 
                                                 // IE use 'srcElement'
    el.setAttribute('name', el.id);

}
</script>



回答3:


I tend to use this approach in all function calls from HTML attributes:-

onclick="SomeMethod.call(this)"

Then in the javascript do:-

function SomeMethod()
{
   this.setAttribute('name', this.id);
}

This has a distinct advantage when you may also assign directly to event handler properties in Javascript code:-

document.getElementById("someID").onclick = SomeMethod

If SomeMethod took the context element as a parameter it would very awkward to set up:-

function(id) {
   var elem = document.getElementById(id)
   elem.onclick = function() { SomeMethod(elem); }
}("someID");

Worse yet this would be memory leaking closure.




回答4:


At this point: SomeMethod(this) - this returns window object so do not use it. The right way to use this keyword is making it context relevant, so use SomeMethod.call(this).



来源:https://stackoverflow.com/questions/619514/javascript-how-to-make-a-control-send-itself-in-a-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!