jQuery:在页面加载时尝试将函数挂钩到onclick

时间:2012-03-12 03:04:07

标签: javascript jquery

我见过类似的问题,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事件。

5 个答案:

答案 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 + ");'>" +
...

这将创建一个包含函数名称和前几个参数的字符串,但随后会在当前循环迭代中添加iduid变量的值,以便完整字符串包括格式正确的函数名称和参数。

请注意,"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); 
});

这是我的解决方案。