在我的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次。
我该如何解决这个问题?
答案 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()
在主页面上生动加载它,而不是选项卡/对话框,这样代码就不会重新加载每次加载时都会添加到事件中。