javascript - 修改后的 DOM 中的表单元格未触发 Jquery 事件

标签 javascript jquery dom

我有一个简单的 Jquery 脚本,它用大量行和单元格填充一个空表。

根据复选框的状态,我想为新填充的表格中的所有单元格切换 CSS 类(页面加载时不存在,而是在表单提交时由 JS 函数动态创建)。

我可以在表格单元格上设置“单击”事件,并且效果很好。

但是我尝试使用 on() 将函数绑定(bind)到 hover() 事件并没有成功。该事件似乎从未被触发,并且没有生成控制台日志消息。关于我做错了什么有什么想法吗?

$("#resultTable").click(function(e){  // This function works fine.
        $(e.target).closest('td').toggleClass('stay');
    });

$("#resultTable td").on("hover", //Same problem for a simpler 'mouseover'
    function(event){
        console.log("MOUSE OVER"); //Never appears
        $(this).toggleClass('over');
    },
    function(event){
        console.log("MOUSE OUT"); //Never appears
        $(this).toggleClass('over');
    }
    );

最佳答案

如果您要动态地将行插入表中,则 .on 如果绑定(bind)到绑定(bind)发生后出现的 tds,则将不起作用。来自文档当调用 .on 时,绑定(bind)事件的元素必须存在于 DOM 中。

事件处理程序仅绑定(bind)到当前选定的元素;当您的代码调用 .on() 时,它们必须存在于页面上。

这可能有效

$j(document).on("hover", "#resultTable td",
    function(event){
        console.log("MOUSE OVER"); //Never appears
        $(this).toggleClass('over');
    },
    function(event){
        console.log("MOUSE OUT"); //Never appears
        $(this).toggleClass('over');
    }
    );

如果您仅动态添加行,则可以将事件附加到 #resultTable 以使委托(delegate)更快一些。

关于javascript - 修改后的 DOM 中的表单元格未触发 Jquery 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12492860/

相关文章:

javascript - Javascript 循环中使用最后一个参数的 jQuery 单击绑定(bind)函数

Javascript window.onload 不等待 DOM 加载

javascript - 用普通的旧 JS 动态渲染 DOM 元素的好方法是什么?

javascript - meteor :隐藏或删除元素?什么是最好的方法

javascript - 在使用 Javascript 插入 HTML 片段后,在 JQM 中将标题与按钮对齐

javascript - 如何根据数量和名称拆分字符串列表?

javascript - 第一次不加载JS文件

javascript - 如何读取本地 JSON 文件

javascript - D3.js:获取附加到选择的数据数组?

javascript - 何时以及为何使用 JS null 合并运算符