Ответ 1
Используйте ключевое слово this
.
<a href="" id="someId" onclick="SomeMethod(this);"></a>
<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);
}
Глупый пример, но идея состоит в том, чтобы не отправлять сам идентификатор, а фактический элемент управления, вызывающий метод. Я клянусь, что это можно сделать, но не повезло искать... частично, потому что я даже не уверен, что искать.
Я думал, что это я, но я, кажется, не тот, что хочу, когда у меня есть script.
Используйте ключевое слово this
.
<a href="" id="someId" onclick="SomeMethod(this);"></a>
Вам не нужно передавать этот в качестве аргумента вашей функции, потому что у вас есть объект события клика, к которому вы можете получить доступ. Итак:
<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)
.