Javascript事件对象未在事件处理函数中填充

时间:2010-02-04 01:06:00

标签: javascript jquery javascript-events

我有以下代码:

HTML

<tr>
    <td onclick="ThingClicked()">click me</td>
</tr>

JS:

function ThingClicked(event) {
    var row = event.currentTarget.parent("tr");
    callAnotherDOMManipulatingFunction(row);
}

由于某种原因,event.currentTarget未定义。我试过'这个',但那也是未定义的。这是怎么回事?如何获取包含此td的行?

4 个答案:

答案 0 :(得分:5)

好吧,既然你包含了一个jQuery标签(并包含了jQuery文档的链接),我会告诉你这是怎么回事。

修改

jQuery live() docs

jQuery clone() docs

编辑:添加了jQuery的ready()函数。您将始终将代码放在内部,如图所示。

$('document').ready(function() {
    $('td').click(function() {
        var row = $(this).closest('tr');
        callAnotherDOMManipulatingFunction(row);
    });
});

当然,这会将click事件附加到每个td标记,但是你明白了。

编辑:

进一步解释。使用jQuery时,通常会在javascript中分配事件,而不是HTML。分配给'td'会将click事件提供给页面上的每个'td'标记,因此您可能会给'td'一个类并使用它来附加事件,例如:

$('.myFreakingAwesomeClass').click(function() {
    ...
});

您通常不需要引用“事件”,但有时会派上用场。

答案 1 :(得分:1)

试试这个:

<tr>
  <td onclick="javascript:ThingClicked(this);">click me</td>
</tr>

function ThingClicked(td) {
    callAnotherDOMManipulatingFunction(td.parentNode);
}

答案 2 :(得分:0)

更改您的代码:

<强> HTML

<tr>
    <td onclick="ThingClicked(this)">click me</td>
</tr>

<强> JS:

function ThingClicked(element) {
    callAnotherDOMManipulatingFunction(element);
}

答案 3 :(得分:0)

试试这个:

<tr>
    <td onclick="ThingClicked(event)">click me</td>
</tr>

使用处理函数的输入参数,特别称为event,而不是其他任何内容。