1

在我的 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()s了吗?每次通话发生 13 次。我怎样才能解决这个问题?

4

2 回答 2

1

问题:

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

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

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


建议:

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

于 2013-05-07T21:28:26.087 回答
0

解决方案是愚蠢且不相关的,但我相信这个世界上的某个人可能会遇到同样的情况。

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

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

于 2013-05-30T08:27:50.927 回答