【问题标题】:When tracking which elements were clicked e.target.id is sometimes empty跟踪点击了哪些元素时,e.target.id 有时为空
【发布时间】:2012-03-25 21:07:15
【问题描述】:

我正在尝试测试以下 JavaScript 代码,该代码旨在跟踪用户在多项选择调查中的反应时间:

document.onclick = function(e) {

    var event = e || window.event;    
    var target = e.target || e.srcElement;

    //time tracking 
    var ClickTrackDate = new Date;
    var ClickData = ""; 
    ClickData = target.id + "=" + ClickTrackDate.getUTCHours() + ":" + 
        ClickTrackDate.getUTCMinutes() + ":" +
        ClickTrackDate.getUTCSeconds() +";";

    document.getElementById("txtTest").value += ClickData;
    alert(target.id); // for testing
}

通常target.id等于被点击元素的id,如你所料,但有时target.id为空,看似随机,有什么想法吗?

【问题讨论】:

  • 您会发现使用 jquery 会更容易,因为它会为您处理浏览器问题、错误和怪癖。

标签: javascript click-tracking


【解决方案1】:

可能是因为被点击的元素没有 ID。例如,如果您有这样的 HTML,就会发生这种情况:

<div id="example">This is some <b>example</b> text.</div>

并且有人点击了粗体字“example”,因此事件目标将是b元素而不是div

您可以尝试向上遍历 DOM 树,直到找到一个确实具有 ID 的元素,如下所示:

var target = e.target || e.srcElement;

while (target && !target.id) {
    target = target.parentNode;
}
// at this point target either has an ID or is null

【讨论】:

  • 确实是这样 - 调查的单选按钮位于表格单元格内,单击按钮但在单元格内仍会选中它,但如您的示例中没有 id对于表格单元格。谢谢!
  • 有这个问题,真的很混乱,在我的情况下,我绑定到一个
  • 但就像你说的,如果我点击包含的文本它可以工作,但如果我点击文本之外的空间它给 currentTarget null...我只是对所有不同的事件成员变量以及我猜它们应该如何指向感到困惑:)
【解决方案2】:

只需使用e.currentTarget 而不是e.target

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签