javascript - Jquery - .append 之后,.hover 在其他元素上不起作用

标签 javascript ajax jquery appendchild

我编写了一些代码来处理通过 AJAX 插入评论。 输入注释后,从服务器接收 HTML 并使用 .append() 将其插入到 DOM 中,似乎不会处理事件 .hover() 为新项目。

有代码:

/**
 * This code manage insert comment with ajax
 **/

$(document).ready(function() 
{
    $('form[id^=insert_comment_for_product_]').submit(function (event)
    {
        event.preventDefault();

        var productId = $(this).attr('id');
        var productIdClear = productId.substr(productId.lastIndexOf('_', 0) - 1, productId.length);

        var textarea = $('#' + $(this).attr('id') + ' textarea').val();
        var textareaId = $('#' + $(this).attr('id') + ' textarea').attr('id');
        var token = $('#' + $(this).attr('id') + ' input#user_comment_product__token').val();

        var gif = $(this).parent('div').children('img.insert_comment_img');
        $(gif).show();

        $.post($(this).attr('action'),
        {
            'id': productIdClear.toString(),
            'user_comment_product[comment]': textarea,
            'user_comment_product[_token]' : token
        },
        function(data) 
        {
            $('div.product_comment>div').append(data);
            $('#' + textareaId).val(' ');
            $(gif).hide();
        });

    });
   /**
    * This is the function that no work afert .append()
    **/


    $('div.comment[id^=comment_]').hover(function()
    {
        var commentId = $(this).attr('id');

        $('#' + commentId + ' img.comment_delete').show();

        $('#' + commentId + ' img.comment_delete').click(function(event)
        {
            event.stopImmediatePropagation();
            commentId = commentId.substr(commentId.lastIndexOf('_') + 1, commentId.length);

            $.post("../../../user/comment/delete",
            {
                'id': commentId.toString()
            },
            function(data) 
            {
                if(data.responseCode == 200)
                {
                    $('div#comment_' + commentId).hide();
                }
            });
        })

    },
    function ()
    {
        var commentId = $(this).attr('id');

        $('#' + commentId + ' img.comment_delete').hide();
    });
});

为什么?

最佳答案

您可以使用 on 函数绑定(bind)到动态添加的元素,而不是这样:

$('div.comment[id^=comment_]').hover(function()

这样做:

$(document).on('mouseover', 'div.comment[id^=comment_]', function(e) {
    // code from mouseover hover function goes here
});

$(document).on('mouseout', 'div.comment[id^=comment_]', function(e) {
     // code from mouseout hover function goes here
});

关于javascript - Jquery - .append 之后,.hover 在其他元素上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16723711/

相关文章:

javascript - 将 Sails JS 部署到 Heroku 时找不到图像

c# - 在 asp.net 上使用 ajax 创建动态控件

asp.net - ASP.NET 中的 session 超时和 AJAX

javascript - D3 图表显示 y 轴为零

javascript - 将单页网站上的 <section> 变暗

jQuery UI 选项卡 : get current tab index

javascript - 我的 javascript 提示脚本不起作用。访问和操作 DOM

javascript - Angularjs:选中单选按钮

javascript - 如何 "join"字典元素

java - 检查组模型中的 Wicket CheckGroup Ajax 口是心非