【问题标题】:.click() event executed only the first time.click() 事件仅在第一次执行
【发布时间】:2010-09-16 22:32:03
【问题描述】:

我有下一个脚本,“/cashflow/arrow/”调用一个 django 视图来获取数据并使用它。然后返回html中加载的数据。

该脚本在第一次单击时运行良好,但是当我想再次单击链接时,没有任何反应。

<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);
    });

})

【问题讨论】:

    标签: jquery ajax django


    【解决方案1】:

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

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

    您可以阅读更多关于它的信息here

    【讨论】:

    • .live() 在 1.9+ 中被删除,如链接文档中所述(现在首选.on())。
    【解决方案2】:

    您返回的 HTML 是否包含 ID 为 #dates_up#dates_down 的元素的新版本?那就是问:他们住在#cash_grid里面吗?

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

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

    【讨论】:

    • 或者,事实上,你可以像 pedro 所说的那样使用 live()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多