Yii afterAjaxUpdate发生了13次?

时间:2013-05-07 13:36:39

标签: ajax yii cgridview

在我的CGridView中我有这个简单的功能:

'afterAjaxUpdate' =>
'function(id, data) {
    var checks2 = $("#checks").val().split(",").sort();
    $("#rule-competitors-grid input:checkbox").each(function() {
        console.log($.inArray($(this).attr("name").substr(11,$(this).attr("name").length - 12), checks2));
        if ($.inArray($(this).attr("name").substr(11,$(this).attr("name").length - 12), checks2) !== -1)
            $(this).attr("checked", "checked");
    });
}',

在一个列表中,一次显示2个项目(用于调试)。

在那边看console.log()?他们每次通话发生13次。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题:

您的CSS选择器对13个复选框有效,然后您可以在“each”语句中进行迭代。如果您希望一次更新一个特定的行,则需要一种新方法。

Yii的文档(http://www.yiiframework.com/doc/api/1.1/CGridView#afterAjaxUpdate-detail)说明了一切:

在收到成功的AJAX响应后将调用的javascript函数。函数签名是函数(id,data),其中'id'指的是网格视图的ID ,'data'是收到的 ajax响应数据


建议:

更改选择器,根据类名和ID值找到需要更新的确切复选框。从网格的'id'变量到你想要更改的特定行。

答案 1 :(得分:0)

解决方案是愚蠢和无关的,但我确信这个世界上的某个人可能遇到同样的问题。

我的问题是JavaScript是通过AJAX加载到对话框/选项卡中的加载页面而不是主页面中。发生的情况是重新分配了“click”触发器,并且每次重新加载选项卡/对话框时都将添加到元素中。重新加载13次以检查小的更改(因为它是一个AJAX对话框,我能够避免更新整个页面),它被加载到里面。

要避免这种情况,请在重新加载对话框/选项卡后立即取消绑定事件,或者使用.on()在主页面上生动加载它,而不是选项卡/对话框,这样代码就不会重新加载每次加载时都会添加到事件中。