【发布时间】:2014-10-15 20:46:27
【问题描述】:
我正在使用 jqGrid 并将按钮动态添加到网格中。添加这些按钮后,在 gridComplete 属性中,我调用我的函数:
function(){
var ids = jQuery("#dataTable").jqGrid('getDataIDs');
for(var i=0;i < ids.length;i++){
var cl = ids[i];
$('.ui-loader.ui-corner-all.ui-body-a.ui-loader-default').remove();
$('#create_' + cl).on('click', function() {
var $popUp = $("<div/>").popup({
dismissible : true,
theme : "b",
overlyaTheme : "e",
transition : "pop"
}).on("popupafterclose", function() {
$(this).remove();
}).css({
'width' : '100%',
'height' : '100%',
'padding' : '5px'
})
$("<a>", {
text : "Edit",
}).buttonMarkup({
inline : false,
mini : true,
}).on("click", function() {
$popUp.popup("close");
$('#dataTable').jqGrid('editGridRow', cl);
}).appendTo($popUp);
$("<a>", {
text : "Delete"
}).buttonMarkup({
inline : false,
mini : true,
}).on("click", function() {
$popUp.popup("close");
}).appendTo($popUp);
$popUp.popup('open').trigger("create");
});
}
除了一个问题外,它工作正常。似乎动态按钮都接收相同的功能(单击第一行中的按钮调用最后一行应该调用的内容,单击第二个按钮调用最后一行的功能,等等......) 因此,似乎我无法将 onclick 动态分配给大量按钮。当我想到它时,我开始认为应该可以通过这种方式为每个按钮分配单击方法,但我不太确定,因为我是 jquery/jqgrid 的新手。有没有什么办法解决这一问题?
这是我添加按钮的代码:
function displayButton(cellvalue, options, rowObject){var act = "<div id='page_" + options.rowId + "'> <a href='#' data-role='button' id='create_"+ options.rowId +"'>Create a popup</a></div>"
return act; return act;}
由jqgrid所在行的模型调用。
formatter: displayButton
【问题讨论】:
-
我遇到了同样的问题,因为它们都是用你创建的最后一个方法设置的,对吧?尝试使用递归函数而不是 for 循环来创建按钮。
-
请不要按照上述评论的建议尝试通过递归来解决这个问题。您可能会想出一种方法来完成这项工作,但对于解决简单的函数闭包问题是完全没有必要的。
标签: javascript jquery html jqgrid