jQuery没有注册click

时间:2013-04-25 03:24:23

标签: jquery dynamic

我遇到的问题是我可以点击我的元素开始并且所有内容都相应地工作,但是当我按下S键从textarea->段改变我的元素后,我再也无法点击了点击已注册。

$(document).ready(function() {
    $('#dynamic').click(function() {
        log('`Clicked`');
        var text = $('#dynamic').text();
        $('#dynamic').replaceWith('<textarea id="dynamic">' + text + '</textarea>');
    });

    $(document).keydown(function(e) {
        log(e.which);
        switch(e.which) {
            // S key
            case 83:
                if ($('#dynamic').is('textarea')) {
                    var text = $('#dynamic').val();
                    $('#dynamic').replaceWith('<p id="dynamic">' + text + '</p>');
                }
                break;
            default: return;
        }
        e.preventDefault();
    });
});

这是我正在使用的代码,它注册了第一次点击,但没有注册元素转换后的第二次点击。 :)

2 个答案:

答案 0 :(得分:3)

$('#dynamic')返回的元素不再存在。您必须使用事件委派来绑定事件处理程序:

$(document).on('click', '#dynamic', function() {
    ...
});

答案 1 :(得分:0)

当您替换原始元素时,已消失 - 以及直接绑定到它的任何处理程序。您可以在重新创建处理程序时再次重新绑定处理程序,或者您可以使用委托事件处理程序,在这种情况下,您可能希望添加一个测试,以确定该元素是否已经是textarea:

$(document).on('click', '#dynamic', function() {
    if (this.tagName === "TEXTAREA") return; // already a textarea, so no action needed
    log('`Clicked`');
    var text = $('#dynamic').text();
    $('#dynamic').replaceWith('<textarea id="dynamic">' + text + '</textarea>');
});