在contenteditable div中发射所有keydown / up事件

时间:2012-07-22 09:12:03

标签: javascript jquery

我的问题......我似乎无法解雇所有的keydown事件。

我正在使用[enter]和[esc] keydown事件来更新/刷新或退出/刷新某些html表中的数据

有静态表格单元格和动态表格单元格,根据用户搜索词输入填充

动态表来自$ .each循环,但div结构完全相同(并且div id是唯一的)。在这两种情况下,生成的表格单元格都是......

<td class="edit"><div contenteditable="true" id="XYZ">[value]</div></td>

keydown函数完全相同....

$(document).ready(function() {

    $("#divA").keydown(function (e) { 
    if (e.keyCode == 13) {
        e.preventDefault();
        // send data to server          
        // refresh stuff
    } 
    if (e.keyCode == 27) {
        // refresh stuff
    }       
    });

    $("#divB").keydown(function (e) { 
    if (e.keyCode == 13) {
        e.preventDefault();
        // send data to server
        // refresh stuff        
    } 
    if (e.keyCode == 27) {
        // refresh stuff
    }       
    });

单独的函数发布日期到服务器是相同的。和更新数据库的PHP也是一样的。并且两者都具有相同的mysql数据结构double, yes null, zero default。 divB中存在数据,alert($("#divB").text());显示将在ajax更新中使用的值。

但我猜这一切都不重要,因为我已将问题缩小到这里......

在divA中,keydown停止[enter]换行符并运行代码

在divB中,keydown不会停止[enter]换行符并且没有代码运行

唯一的区别是divA是静态的,divB是在javascript中生成的。如何才能运行divB keydown函数?

1 个答案:

答案 0 :(得分:3)

由于某些div是动态的,因此无法使用keydown将事件绑定到它们。此方法仅在页面加载时绑定到现有div。

您需要的是使用jquery.on()jquery.live()(如果您的jquery版本支持它,则更新,以便更好地使用它。)