在浏览器中,我将json数据流转换为一组类似于表中行的div,其中的跨度类似于行中的单元格。
其中一个跨度是一个帮助按钮,需要有一个点击功能,需要有一个参数来识别要显示的帮助信息。该参数来自json" row"数据
构建"行"的代码和"细胞"工作正常,除了这里显示的帮助按钮:
var wrkNameOrIDCode
// in this next, wrkData[i] is the "row",
// and wrkData[i]["NameOrIDCode"] produces the correct help code value
wrkNameOrIDCode = wrkData[i]["NameOrIDCode"]
$wrkHelpBtn = $('<span>', { // this is the gelp button element
id: "ACTV_" + i.toString() + "_HelpBtn",
click: (function () {
RspHelp(wrkNameOrIDCode, "-"); // the "normal" way to call the help function
return false;
}),
}),
class: "ARC_Help",
html:"?"
})
上述情况不起作用,因为它总是发送最后一行的值:
wrkNameOrIDCode = wrkData[i]["NameOrIDCode"]
我也尝试使用这样设置的点击功能:
click: ({ param1: wrkNameOrIDCode },
function () {
RspHelpFromActv();
return false;
}),
// then, elsewhere
function RspHelpFromActv(event) {
RspHelp(event.data.param1, "-")
}
然而,第二种情况并不起作用,因为它说当事件到达RspHelpFromActv时未定义事件。
我已经了解了对局部变量的需求,并且如图所示,我尝试使用jquery数据函数,但没有快乐。
任何有关此的帮助将不胜感激。谢谢!
答案 0 :(得分:0)
你的谜题是由于这一行:
RspHelp(wrkNameOrIDCode, "-");
它调用名为“RspHelp”的函数传递名为“wrkNameOrIDCode”的变量的值。您遇到的问题是,当您通过循环构建行时,此变量会发生变化,并且在循环结束时,变量将保持其最后值。因此,当调用该函数并且它传递变量的“当前”值时,您将得到您不想要的结果。诀窍是在定义时传递有效变量的值。
使用jQuery.proxy函数可以实现此手杖。
例如:
click: $.proxy(function(currentWrkNameORIDCode) {
RspHelp(currentWrkNameORIDCode, "-"); // the "normal" way to call the help function
return false;
}, this, wrkNameOrIDCode);
注意:我没有对此进行语法检查,因此请仅将其用于说明。我建议详细研究jQuery.proxy()函数。