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

3

我正在尝试通过操作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个回答

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

我尝试使用livequery插件,但没有任何反应。我正在使用jQuery 1.2.6,不幸的是我现在无法升级它! - André Miranda

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());
                    }
                });
            });
    });
}

哦!!谢谢!!这很简单,但我没看出来!! :-) - André Miranda

3
如果你创建一个单一的函数来设置页面或重新绑定控件,然后在Ajax调用成功时调用该函数,那可能会起作用。
编辑
试试这个...
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
}

我尝试在我的示例中做到这一点,但没有成功...不知道我是否做对了!! - André Miranda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接