我正在尝试编写一个通用表生成器,我可以在其中告诉它在每个单元格的 onclick 事件中调用的函数。然后在页面的其他地方定义该函数。
问题是我无法让页面在正确的时刻评估功能。我希望它在构建 DOM 时而不是在触发 click 事件时将我的字符串转换为函数。也许这在 Javascript/JQuery 中是不可能的?
我最初用 C# 编写的服务器端代码的简化版本是:
string functionCall = "DoSomething(4);";
TableCell detailCell = new TableCell();
detailCell.Attributes.Add("onClick", functionCall);
functionCall = "DoSomething(5);";
detailCell = new TableCell();
detailCell.Attributes.Add("onClick", functionCall);
当它在浏览器中呈现为 html 时,这将起作用。它变成了:
function DoSomething(p)
{
alert(p);
}
<td onclick="DoSomething(4)"></td>
<td onclick="DoSomething(5)"></td>
我想在 Javascript 中复制这个功能。
如果我做:
var functionCall = 'DoSomething(4);';
$('#detailCell').attr('onclick', functionCall);
由于某种原因,它不会在 IE7 中触发该事件,而是在 Chrome 中触发它。
如果我做:
var functionCall = 'DoSomething(4);';
$('#detailCell1').click(function () { eval(functionCall); });
functionCall = 'DoSomething(5);';
$('#detailCell2').click(function () { eval(functionCall); });
那么在添加点击事件时它不会将 functionCall 更改为一段文本。相反,它在单击单元格时评估 functionCall。这意味着 functionCall 的值现在是错误的。
例如,即使我单击 detailCell1,它也总是执行 DoSomething(5),因为那是 functionCall 的最后一个值。
如果我做:
var functionCall = 'DoSomething(4);';
$('#detailCell1').click(eval(functionCall));
它在添加点击事件时立即运行 functionCall 中的函数,而不是在被点击时。
我希望这是有道理的,因为它很难解释。
基本上我只想能够做到
<td onclick="any javascript I feel like storing in a string"></td>
使用 jQuery。
这甚至可能吗?
这是我在stackoverflow上的第一篇文章,所以请温柔...