在单元格中文本发生变化时的jQuery事件监听器?

时间:2010-10-08 05:40:31

标签: jquery javascript-events

jQuery中是否有任何方法可以将监听器附加到单元格,以便当单元格内的文本发生更改(通过JavaScript而不是用户)时,会触发事件?

4 个答案:

答案 0 :(得分:5)

要扩展mway's answer,这里有一些代码。

var td = $('#my-table tr td:eq(1)');
var tdHtml = td.html();
setInterval(function() {

    if (td.html() !== tdHtml) {
         // it has changed
         tdHtml = td.html();
    } 

}, 500);

......以及他的第二个建议。

function updateTd(html) {
     $('#my-table tr td:eq(1)').html(html);

     // additional code
}

您还可以将DOMSubtreeModified事件绑定到元素,但浏览器支持不是最好的。

答案 1 :(得分:4)

不是原生,不是。你有几个选择:

1)使用setInterval()测试该值与之前的值,如果不同则采取相应的行动。

2)使用常用方法更改单元格内容,这样您还可以在更改其值时执行其他逻辑,而无需多次重写。

答案 2 :(得分:0)

恐怖。可能在2010年被接受了。

    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            // NB the 1st char put or typed into a TD causes a mutation in the TD... 
            // but chars 2 ... n cause a mutation in its child '#text' node
            let target = mutation.target;
            if( target.cellIndex === undefined ){
                target = target.parentElement;
            }
            // NB don't use a "truthy" test for cellIndex here: you would miss index 0!
            if( target !== null && target.cellIndex !== undefined ){
                // ... then the target is the TD where the content has changed.  
            }
       });
    });

    const config = { attributes: true, childList: true, characterData : true, subtree : true };
    observer.observe( htmlTable, config );

答案 3 :(得分:0)

使用输入事件侦听器。

  

$(document).on('input','#table> tbody> tr> td',function(){})