这里真的很简单的jquery问题,我还没有解决。我有以下html表
<table id="table-1">
<tr>
<td>Value 1</td>
<td>Value 2</td>
<td>
<button id="btn-1" value="Go"></button>
</td>
</tr>
</table>
单击表格行时,我有以下事件监听器
$("table-1 tr").on(
'click',
function(e){
if(button was clicked){
//do some stuff
} else {
//do different stuff
}
}
);
我希望每当选择表格行时都会触发此事件侦听器,但点击的项目是我的按钮时除外。我一直试图使用:not
和.not()
,但没有运气。有什么想法吗?
答案 0 :(得分:3)
使用event.stopPropagation(),以防止事件冒泡到父元素。
$('#btn-1').click(function(event){
event.stopPropagation();
})
答案 1 :(得分:3)
基于您想要捕获元素类型的示例。
$("#table-1 tr").on('click', function (e) {
var elementType = $(e.target).prop('nodeName');
if (elementType == 'BUTTON') {
console.log('buttonClick');
} else {
console.log(elementType);
};
});
答案 2 :(得分:1)
如果您专门在按钮上设置事件监听器怎么办?最具体的规则应适用。因此,如果单击该行,则会触发行事件,如果单击该按钮,则按钮事件将首先触发,然后父节点将运行。因此,您可以使用一个简单的变量来检查按钮是否已被选中。
Var gContext;
$("#btn-1"). on('click', function() { gContext = true });
$("table-1 tr").on(
'click',
function(e){
if(button was clicke$("table-1 tr").on(
'click',
function(e){
if(gContext === true){
//do some stuff
} else {
//do different stuff
}
}
);d){
//do some stuff
} else {
//do different stuff
}
}
);
答案 3 :(得分:1)
以下代码检查事件目标的标记名称,以了解tr
的哪一部分被点击。
$('table').on('click', 'tr', function (e) {
var i = $('table tr').index(this);
var tag = e.target.tagName.toLowerCase();
if (tag === 'button') {
alert('go #' + i);
}
else {
alert('select row #' + i);
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>Value 1</td>
<td>Value 2</td>
<td><button>Go</button></td>
</tr>
<tr>
<td>Value 1</td>
<td>Value 2</td>
<td><button>Go</button></td>
</tr>
</table>
&#13;