【问题标题】:jQuery how can I rebind this event after a ajax callback?jQuery 如何在 ajax 回调后重新绑定此事件?
【发布时间】:2009-02-26 05:36:41
【问题描述】:

我正在尝试通过操作 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 回调没有任何反应。

谢谢!!

【问题讨论】:

    标签: jquery


    【解决方案1】:

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

    【讨论】:

    • 我尝试使用 livequery 插件,但没有任何反应。我正在使用 jQuery 1.2.6,不幸的是我现在无法升级它!
    【解决方案2】:

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

    【讨论】:

    • 哦!谢谢sssssssssssssss!这很简单,但我看不到!! :-)
    【解决方案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
    }
    

    【讨论】:

    • 我尝试在我的示例中这样做,但没有成功......不知道我是否做对了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2017-01-18
    • 1970-01-01
    • 2023-03-13
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多