Jquery更改onclick函数名称

Jquery change onclick function name

本文关键字:函数 onclick 更改 Jquery      更新时间:2023-09-26

我的问题是!我正在将内容从一个表复制到另一个表,当我这样做时,我需要将函数名称更改为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");

我看不到表的实际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功能。