Есть несколько вариантов, как сделать это, и каждый ведет себя по-разному.
Опция 1 Установите onclick="btn(this)"
на кнопке. Это всегда передает саму кнопку в качестве аргумента. Другие параметры передают событие в отличие от самого элемента.
function btn(elem) {
var theTarget = elem;
console.log(theTarget.id);
}
<p>
Option 1:
<button id="the-button" onclick="btn(this)">
btn(this)
<span id="the-span" style="border: 1px solid red">This is a span</span>
</button>
</p>
Опция 2 Установите onclick="btn(event)"
на кнопке. Это передает событие, и event.target
будет элементом, по которому щелкают. Например, событие, ссылающееся на span
внутри кнопки, будет пропущено при нажатии.
function btn(evt) {
var theTarget = evt.target;
console.log(theTarget.id);
}
<p>
Option 2:
<button id="the-button" onclick="btn(event)">
btn(event)
<span id="the-span" style="border: 1px solid red">This is a span</span>
</button>
</p>
</p>
Опция 3 Установка атрибута id
для кнопки. Затем привяжите обработчик событий к кнопке с помощью JavaScript. Это ведет себя как вариант 2 в отношении того, как событие ссылается на дочерние элементы.
function btn(evt) {
var theTarget = evt.target;
console.log(theTarget.id);
}
document.getElementById('the-button').onclick = btn;
<p>
Option 3:
<button id="the-button">
binding
<span id="the-span" style="border: 1px solid red">This is a span</span>
</button>
</p>
Вот фрагмент со всеми тремя опциями в одной программе:
function btn(evt) {
var theTarget = evt.target || evt;
console.log(theTarget.id);
}
document.getElementById('third-button').onclick = btn;
<p>
Option 1:
<button id="first-button" onclick="btn(this)">
btn(this)
<span id="first-button-SPAN" style="border: 1px solid red">This is a span</span>
</button>
</p>
<p>
Option 2:
<button id="second-button" onclick="btn(event)">
btn(event)
<span id="second-button-SPAN" style="border: 1px solid red">This is a span</span>
</button>
</p>
<p>
Option 3:
<button id="third-button">
binding
<span id="third-button-SPAN" style="border: 1px solid red">This is a span</span>
</button>
</p>