<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で次のようにします:-
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)
を使用します。