2010-09-16 68 views
1

我有下一个脚本,“/ cashflow/arrow /”调用一个django视图来获取数据并使用它。然后它返回在html中加载的数据。.click()事件仅在第一次执行

该脚本在第一次点击中工作正常,但是当我想再次单击链接时,没有任何反应。

<script> 
$(document).ready(function(){ 
    var prev_months = {{ prev_months }} 
    var next_months = {{ meses_desp }} 

    function arrow(meses_ant, next_months) { 
     $.get("/cashflow/arrow/", { prev_months: prev_months, next_months: next_months}, 
      function(data){ 
      $("#cash_grid").html(data);  
     }); 
    } 

    $("#dates_up").click(function() { 
     if (prev_months > 0) { 
      prev_months = prev_months - 1; 
     } 
     next_months = next_months + 1; 
     arrow(prev_months, next_months); 
    }); 
    $("#dates_down").click(function() { 
     prev_months = prev_months + 1; 
     if (next_months > 0) { 
      next_months = next_months - 1; 
     } 
     arrow(prev_months, next_months); 
    }); 

})

回答

2

尝试使用.live("click", function() {...});代替点击事件。 如:

$("#dates_up").live("click", function()... 
$("#dates_down").live("click", function()... 

你可以阅读更多关于它here

+0

谢谢佩德罗!它工作! – mfalcon 2010-09-16 23:07:59

+1

'.live()'在1.9+版本中被删除,正如链接文档中所述('.on()'现在是首选)。 – 2013-03-06 20:58:40

1

以任何机会,做你恢复包含与IDS #dates_up#dates_down元素的新版本的HTML?那就是问:他们住在#cash_grid里面吗?

如果是这样,那么当您更新HTML时,您在document.ready中绑定的点击事件将丢失,因此您必须重新绑定这些点击事件。

最简单的方法是将您的click()绑定代码放在一个单独的函数中,在document.ready()中调用它以设置绑定,然后在AJAX的get()回调中调用它对已返回的新元素设置新绑定

+0

,或者更确切地说,你可以现场使用()作为佩德罗说: – 2010-09-16 22:54:46

+0

感谢史蒂夫!你的解决方案也能正常工作。 – mfalcon 2010-09-16 23:09:11