2009-02-26 88 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

相關問題