我正在处理带有可点击行的javascript数据表。单击时每行将浏览器转发到其他页面。 该行的一列包含一个超链接。单击hyperlin时,我不希望触发或管理行单击事件。
以下是我实现行点击事件的方法
$(tableId+' tbody').on( 'click', 'tr', function (e) {
window.location.href = $(this).attr('url');
});
答案 0 :(得分:1)
当您向父级添加事件侦听器时,默认情况下该事件会向下“冒泡”并将事件附加到所有子级。因此,在这种情况下,您可以在tr
(父级)上设置事件,并且事件将向下冒泡并将其自身附加到td
(子级)。因此,根据我的理解,其中一个td
包含您的href
(超链接),因此要阻止最初在父级上设置的click
事件,您必须专门设置另一个事件侦听器在此事件的函数中,event type click
只需要状态event.stopPropagation()
,它将覆盖tr
点击事件,该事件会冒泡。
document.addEventListener('DOMContentLoaded',()=>{
//SET EVENT ON PARENT(TR), EVENT BUBBLES BY DEFAULT DOWNWARDS THEREFORE TD's WILL INHERIT
document.getElementById('parent').addEventListener('click',()=>window.location.href = "wherever");
//ADDING ANOTHER EVENT LISTENER OF THE SAME TYPE (CLICK) WHICH BLOCKS THE BUBBLING PROPOGATION DOWNARDS
document.getElementById('myhyperlink').addEventListener('click',(e)=>event.stopPropagation());
});
答案 1 :(得分:0)
使用preventDefault()
$(tableId+' tbody').on( 'click', 'tr', function (e) {
e.preventDefault();
window.location.href = $(this).attr('url');
});
答案 2 :(得分:0)
您可以按照以下方式编写代码:
$(tableId+' tbody').on( 'click', 'tr', function (e) {
e.preventDefault();
window.location.href = $(this).attr('url');
});
答案 3 :(得分:0)
您必须禁用该特定列的行单击
$('tableId+' tbody'').on('click', 'td', function () {
if ($(this).index() == 4 ) { // provide index of your column in which you prevent row click here is column of 4 index
return;
}
// you can do additional functionality by clicking on this column here
});
答案 4 :(得分:0)
如果您想要阻止点击重定向页面的锚点,您只需捕获点击事件并禁用它的默认行为。
$("table td a").click(function(e){
e.preventDefault();
});
您必须防止默认行为,如果您还要停止传播事件,则不会调用其他事件侦听器。在此处查看更多信息:What's the difference between event.stopPropagation and event.preventDefault?
如果您的目标是仅在启用javascript时禁用锚链接的重定向,其他解决方案可能是设置将禁用默认重定向的onclick
属性。但是,这似乎不适用于基于webkit的浏览器。
<a href="http://example.com" onclick="javascript:return false;">and example</a>