jQuery如何在ajax回调后重新绑定此事件?

时间:2009-02-26 05:36:42

标签: jquery

我正在尝试通过操作jQuery选择器来自己创建一个文本编辑。但是,在第一次ajax回调之后,其他回调相同的输入文本不再起作用了......

function editaVal(celDiv, id)
    {
        var novoConteudo = $("<input type='text' id='novoCont" + id + "' value='" + $(celDiv).html() + "' />");
        $(celDiv).dblclick(function()
        {
            $(this).html(novoConteudo);
        });

        $(novoConteudo).blur(function()
        {
            $(novoConteudo).parents("tr").removeClass('trSelected');
            $.ajax({
                type: 'POST',
                url: '/SuperAdmin/SalvaValor/?busca=' + $(novoConteudo).val() + '&codValor=' + id,
                beforeSend: function()
                {
                    $(celDiv).html($("#loading").show());
                },
                success: function()
                {
                    $(celDiv).html($("#loading").hide());
                    $(celDiv).html(novoConteudo.val());
                }
            });
        });
    }

我的问题是:我该如何重新绑定?重新绑定模糊事件...当我模糊输入文本时,第二个ajax回调没有任何反应。

谢谢!

3 个答案:

答案 0 :(得分:9)

您可以使用jQuery.live,(jQuery 1.3+)。它将处理程序绑定到所有当前和将来匹配元素的事件。

答案 1 :(得分:5)

您将"onblur"处理程序附加到ajax更新后被删除的元素。如果您希望事件持续存在,只需在创建时将其绑定 (即在dblclick上):

function editaVal(celDiv, id)
{
    $(celDiv).dblclick(function()
    {
        var text = $(this).html();
        var novoConteudo = $('<input type="text" />')
            .appendTo($(this).empty())
            .attr('id', 'novoCont' + id)
            .val(text)
            .blur(function()
            {
                $(this).parents("tr").removeClass('trSelected');
                $.ajax({
                    type: 'POST',
                    url: '/SuperAdmin/SalvaValor/?busca=' + $(this).val() + '&codValor=' + id,
                    beforeSend: function()
                    {
                        $(celDiv).html($("#loading").show());
                    },
                    success: function()
                    {
                        $(celDiv).html($("#loading").hide());
                        $(celDiv).html(novoConteudo.val());
                    }
                });
            });
    });
}

答案 2 :(得分:3)

如果您创建一个设置页面或重新绑定控件的函数,然后在Ajax调用成功时调用该函数,那么这可能有效。

EDIT
试一试......

success: function()                
{                    
     $(celDiv).html($("#loading").hide());                    
     $(celDiv).html(novoConteudo.val());     
     ConfigMyInputs();           
}

function ConfigMyInputs()
{
     //foreach item
     //configure double click
     //configure blur
}

function MakeMyAjaxCall() {
    //AJAX CODE HERE
}