jQuery 单击事件在包含在光滑网格单元格中时不会为锚点触发

jQuery click event not firing for anchor when contained within slickgrid cell

本文关键字:单元格 包含 事件 单击 jQuery 网格      更新时间:2023-09-26

我有光滑的网格设置来使用RowSelectionModel以及一个包含超链接设置的列,使用自定义格式化程序(稍微修改以保护无辜者):

function linkFormatter(row, cell, value, columnDef, dataContext) {
    return "<a href='#' rel='XYZ'>View</a>";
}

使用以下单击事件处理程序:

$('a[rel=XYZ]').on('click',function (e) {
    $(this).replaceWith('some html');
});

上述处理程序永远不会为网格内的链接触发。 如果我在光滑网格之外创建链接,它工作正常,表明我的选择器和函数有效。

如果我将 JavaScript 函数挂接到 <a> 标签中,它可以正常工作,但我真的宁愿让我的 js 不显眼。 关于我可以做些什么来为嵌入在光滑网格单元格中的超链接触发点击处理程序的任何建议?

$('PARENT_ELEMENT').on('click','a[rel=XYZ]',function (e) {
    $(this).replaceWith('some html');
});

只需确保在绑定事件时'PARENT_ELEMENT'存在即可。最安全的方法是使用'body'document作为'PARENT_ELEMENT'

我没有

使用过 slickgrid,但我怀疑您在填充网格之前附加了事件处理程序。是否有可以参与onGridDataLoaded或类似事件?

此处的示例使用如下内容:

loader.onDataLoaded.subscribe(function () {
    // rewire handlers
}) 

正如 Tim 所说,你可以像这样使用同样的东西:

$(document).on('click', 'a[rel=XYZ]', function (e) {
    $(this).replaceWith('some html');
});