Jquery更改onclick函数名称

时间:2012-02-05 21:42:02

标签: javascript jquery

我的问题是!我正在将内容从一个表复制到另一个表,当我这样做时,我需要将函数名称更改为talentselect而不是附加到每个表行的driverselect。我仍然需要保持变量值来解析。只是想知道是否有人可以帮助我。我知道我应该使用Jquery将事件绑定到元素而不使用OnClick但是现在我需要一个解决方案来实现OnClicks。

非常感谢!

复制表格

<table id="driverselectiontable" cellspacing="0">
<tr class="chosen" onclick="return driverselect(this, value, value);">
<td>driver</td></tr>
<tr class="odd" onclick="return driverselect(this, value, value);">
<td>driver</td></tr>
<tr class="even" onclick="return driverselect(this, value, value);">
<td>driver</td></tr>
<tr class="chosen" onclick="return driverselect(this, value, value);">
<td>driver</td></tr>
<tr class="even" onclick="return driverselect(this, value, value);">
<td>driver</td></tr>
</table>

<table id="talentselectiontable" cellspacing="0">
</table>


$("#talentselectiontable").html($("#driverselectiontable .chosen").clone(true).attr("class","odd"));

所以基本上我正在复制所有具有名为“selected”的类的表行,但在这样做时我需要将函数调用名称更改为“talentselect”。但是表中的每一行都有不同的参数被解析,并用PHP分配。

我已经尝试过这段代码,但它仍无法正常工作

$("#talentselectiontable tr").attr("onclick").replace("driverselect", "talentselect");

1 个答案:

答案 0 :(得分:2)

我看不到你桌面的实际HTML,所以这可能会有点不正确,但是应该让你开始。

$("#talentselectiontable tr").attr("onclick", "return talentselect(this, value, value);");

如果您使用事件处理程序而不是内联onclick属性,那么整个问题实际上会容易得多。然后,您可以使用jQuery live()函数(请参阅http://api.jquery.com/live/),这意味着JQuery将负责为您更改函数。您的解决方案看起来像这样:

$("#driverselectiontable tr").live('click', driverselect);
$("#talentselectiontable tr").live('click', talentselect);

然后是任何代码,以确保您的克隆代码被调用。

编辑:在回复评论时,看起来这就是您所追求的:

var clickval = $("#talentselectiontable tr").attr("onclick");
$("#talentselectiontable tr").attr("onclick", clickval.replace('driverselect', 'talentselect'));

这应该让你去。

为了更好的JavaScript实践,我会完全推荐另一种方法。而不是将参数值存储在“onclick”属性中,而是将它们存储在数据属性中。所以你的HTML看起来像这样:

<table id="driverselectiontable" cellspacing="0">
<tr class="chosen" data-myparam1="value" data-myparam2="value"><td>driver</td></tr>

等等。然后,您可以使用JQuery来解析值:

function driverselect() {
    var row = $(this),
        param1 = row.attr('data-myparam1'),
        param2 = row.attr('data-myparam2');

    // rest of the code goes here

}

您的标记将更清晰,您可以使用上述live() jQuery功能。