HTML
<div id="test">
<form method="post">
<button name="type" value="add">
<span class="glyphicon glyphicon-plus"></span>
</button>
<button name="type" value="subtract">
<span class="glyphicon glyphicon-minus"></span>
</button>
</form>
</div>
的jQuery
$(document).ready(function () {
$('#test').on('click', 'form button', function (event) {
console.log(event.target.tagName);
console.log(event.target.value);
event.preventDefault();
});
});
我希望能够看到点击了哪个按钮 - “添加”按钮或“减去”按钮。但是,根据您点击button
元素的位置,点击事件可能是button
本身或其中的span
上的气泡。
示例控制台输出
BUTTON
subtract
SPAN
undefined
BUTTON
add
SPAN
undefined
获取与我在传递给'form button'
函数的selector
参数中指定的on()
选择器匹配的元素的最佳方法是什么?
答案 0 :(得分:1)
jQuery
将this
绑定到匹配元素:
$(document).ready(function () {
$('#test').on('click', 'form button', function (event) {
console.log(this.tagName);
console.log(this.value);
event.preventDefault();
});
});
来自jQuery文档:
当jQuery调用处理程序时,
this
关键字是对传递事件的元素的引用;对于直接绑定事件,这是附加事件的元素,对于委派事件this
是匹配selector
的元素。 (请注意,如果事件来自后代元素,则this
可能不等于event.target
。)要从元素创建jQuery对象以便它可以与jQuery方法一起使用,请使用{{ 1}}。
答案 1 :(得分:0)
您可以使用closest()
来匹配closest()
选择器引用的元素或其任何后代
$('#test').on('click', 'form button', function (event) {
var $button=$(event.target).closest('button');
console.log($button.val());
event.preventDefault();
});
编辑:不确定为什么我在原始问题中遵循目标方法。使用this
更有意义。但是,在某些情况下,您需要确定目标是选择器还是后代,因此将答案保留为
的 DEMO 强>