2009-02-26 60 views
3

我想通过操纵jQuery选择器来创建文本编辑。但是,第一个Ajax回调后,其他回调相同的输入文本不工作了......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回调没有任何反应。

谢谢!!

回答

5

你附加"onblur"处理程序到被阿贾克斯更新后消灭的元素。如果你希望事件持续下去,只是将其绑定当你创建(即在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()); 
        } 
       }); 
      }); 
    }); 
} 
+0

哦! Thanksssssssss!这很简单,但我看不到! :-) – AndreMiranda 2009-02-26 06:19:14

9

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

+0

我试着使用的liveQuery插件,但什么都没有发生。我使用的是jQuery 1.2.6,不幸的是我现在无法升级它! – AndreMiranda 2009-02-26 05:43:07

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 
} 
+0

我试过对我的例子做这件事,但没有成功......不知道我是否做得对! – AndreMiranda 2009-02-26 06:03:50

相关问题