2014-02-06 149 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