2014-02-06 201 views
0

我想單擊$(。excluirs)時刷新表格。該表是從PHP數據加載。當我點擊按鈕時,php代碼就會執行,並且我從數據庫中刪除數據。 但我想刷新表格的內容。所以,我試圖再次調用函數completeTable();,但它沒有工作。警報出現,但表不刷新。javascript遞歸函數

function completeTable(){ 
    $.post("completa_tabela.php", {cd_turma: $('#turma').val()}, function(data){ 

     data = jQuery.parseJSON(data); 

     $.each(data.json, function(){ 
      var button = "<button type='button' class='excluir' value='" + this['codigo'] + "'>X</button>"; 
      $('#' + this['dia_hora']).html(this['nome'] + button); 
     }); 

     $('.excluir').click(function(){ 
      $.post("altera_horario.php", {excluir: true, cd_horario: $(this).val()}, function(){ 
       alert("$('excluir').click"); 
        completeTable(); 
      }); 

     }); 

    }); 
} 

我該怎麼做?

回答

-1

請使用$('.excluir').bind('click', function(){});代替$('.excluir').click(function(){});

你也可以使用$('.excluir').live('click', function(){});

+0

-1:這不解決OP的問題,'.bind'和'.live'一直以來的jQuery 1.7棄用。 –

+0

謝謝,我們可以在Satpal使用'on'時使用它。 – Omidam81

2

你們是不是遞歸函數。在您的代碼中,您是動態創建元素並綁定事件。您可以使用Event Delegation。您應該使用委託事件方法使用.on()

委託事件的優點是它們可以處理來自稍後添加到文檔中的後代元素的事件。

更改代碼

function completeTable(){ 
    $.post("completa_tabela.php", {cd_turma: $('#turma').val()}, function(data){ 
     data = jQuery.parseJSON(data); 
     $.each(data.json, function(){ 
      var button = "<button type='button' class='excluir' value='" + this['codigo'] + "'>X</button>"; 
      $('#' + this['dia_hora']).html(this['nome'] + button); 
     });   
    }); 
} 

$(document).on('click','.excluir', function(){ 
    $.post("altera_horario.php", {excluir: true, cd_horario: $(this).val()}, function(){ 
     alert("$('excluir').click"); 
      completeTable(); 
    });  
}); 
+0

感謝您的回答。我認爲如果我喜歡這樣做,這個事件將不被認可,因爲'.excluir'類還沒有被創建......會嗎? – ahmm95

+0

@ user3260711,我已經使用了[** Event Delegation **](http://learn.jquery.com/events/event-delegation/)。所以它會適用於當前以及將來添加的元素 – Satpal

+0

你是對的,我不知道它。但我仍然有同樣的問題.. php代碼執行,數據被刪除,我稱'completeTable()'和內容不重新加載。 – ahmm95