Javascript:コントロールにメソッドで自分自身を送信させる方法

StackOverflow https://stackoverflow.com/questions/619514

  •  03-07-2019
  •  | 
  •  

質問

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

SomeMethodが持つ可能性のある場所:

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

代わりに:

function SomeMethod(itemId)
{
  var someItem;

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

}

愚かな例ですが、アイデアはID自体ではなく、メソッドを呼び出す実際のコントロールを送信することです。私はこれを行うことができると誓いますが、検索する運がなかった...部分的には何を検索するのかわからないからです。

自分は自分だと思ったが、自分が持っているスクリプトを実行したときに自分が望んでいるものではないようだ。

役に立ちましたか?

解決

this キーワードを使用します。

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

他のヒント

this を関数の引数として渡す必要はありません。アクセスできるクリックイベントオブジェクトがあるためです。だから:

<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>

私は、HTML属性からのすべての関数呼び出しでこのアプローチを使用する傾向があります:-

onclick="SomeMethod.call(this)"

次に、JavaScriptでdo:-

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

これには、Javascriptコードのイベントハンドラープロパティに直接割り当てることもできるという明確な利点があります:-

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

SomeMethodがコンテキスト要素をパラメーターとして使用した場合、セットアップするのは非常に厄介です:-

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

さらに悪いことに、これはメモリリーククロージャになります。

この時点で: SomeMethod(this)- this はウィンドウオブジェクトを返すため、使用しないでください。 this キーワードを使用する正しい方法は、コンテキストに関連するようにすることなので、 SomeMethod.call(this)を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top