我见过类似的问题,HERE并试过了,但我似乎无法让它发挥作用。 这是我动态生成表行的代码。
for (var contribution = 0; contribution < candidate.contributions.length - 1; contribution++) {
var id = candidate.contributions[contribution].donor_id;
var uid = candidate.contributions[contribution].user_id;
$("#history-table").append(
"<tr onclick='" + parent.viewEngine.pageChange('public-profile', 1, id, uid) + ";>" +
"<td class='img-cell'>" +
"<img class='profile-avatar-small' src='/uploads/profile-pictures/" +
candidate.contributions[contribution].image + "' alt='' /></td><td class=''>" +
"<h2>" + candidate.contributions[contribution].firstname +
" " + candidate.contributions[contribution].lastname + "</h2></a><br/><br/>" +
"<span class='contribution-description'>" + candidate.contributions[contribution].contribution_description + "</span></td>" +
"<td><h3>$" + formatCurrency(candidate.contributions[contribution].contribution_amount) + "</h3></td></tr>");
}
一旦页面加载,这仍然会执行click事件,这不是所需的行为。我需要能够单击tr来执行click事件。
答案 0 :(得分:2)
将整个事物作为字符串传递:
"<tr onclick='parent.viewEngine.pageChange(\'public-profile\', 1, " + id + ", " + uid + ");>" // + (...)
但是,当您使用jQuery时,您应该使用.on()
附加点击处理程序。
答案 1 :(得分:1)
我想知道你是否可以更好地简化一些事情。
如果您的行是动态添加的,请尝试在<tr>
标记中添加某种元数据,例如像这样的东西:
<tr id="id" name="uid">
然后使用您的jQuery(需要v.1.7)尝试以下内容:
$('#history-table tr').on('click', function(){
parent.viewEngine.pageChange('public-profile', 1, this.id, this.name);
});
这可能需要修改,具体取决于页面呈现的工作方式,但是从主表标记中删除它会更清晰,更容易阅读。
答案 2 :(得分:1)
(我真的不建议使用这样的内联事件处理程序,特别是当你已经使用jQuery时,但无论如何......)
问题是你需要函数的名称以你传递给.append()
的字符串结尾,但你只是调用函数并附加结果。试试这个:
...
"<tr onclick='parent.viewEngine.pageChange(\"public-profile\", 1, " + id + "," + uid + ");'>" +
...
这将创建一个包含函数名称和前几个参数的字符串,但随后会在当前循环迭代中添加id
和uid
变量的值,以便完整字符串包括格式正确的函数名称和参数。
请注意,"public-profile"
周围的引号是单引号,但这不起作用,因为您还为onclick='...'
使用了单引号,因此您应该使用双引号,但它们需要被转义,因为整个字符串都是双引号。
答案 3 :(得分:0)
那是因为你正在执行这个功能,而不是连接它。尝试:
onclick='parent.viewEngine.pageChange("public-profile", 1, id, uid);'
答案 4 :(得分:0)
拿这个 - &gt;
$("#contribution-" + uid).click(function(){
parent.viewEngine.pageChange('public-profile',1, id, uid);
});
做两件事:
1)将其移出“for”语句
执行for语句后,也会执行click函数。 click语句中没有提供click函数作为回调函数。
2)将其更改为 - &gt;
$("tr[id^='contribution-'").on('click', function(){
var idString = $(this).attr("id").split("-"); //split the ID string on every hyphen
var uid = idString[1]; //our UID sits on the otherside of the hyphen, so we use [1] to selec it
//our UID will now be what we need. we also apply our click function to every anchor element that has an id beginning with 'contribution-'. should do the trick.
parent.viewEngine.pageChange('public-profile',1, id, uid);
});
这是我的解决方案。