При отслеживании того, какие элементы были нажаты, e.target.id иногда пуст - PullRequest
3 голосов
/ 26 марта 2012

Я пытаюсь протестировать следующий код 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 пуст, на первый взгляд случайные идеи?

Ответы [ 2 ]

7 голосов
/ 26 марта 2012

Возможно, потому что элемент, по которому щелкнули, не имел идентификатора.Это произойдет, например, если у вас есть такой HTML-код:

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

, и кто-то нажимает полужирное слово «пример», так что целью события будет элемент b вместо div.

Вы можете попробовать пройтись по дереву DOM, пока не найдете элемент, у которого есть идентификатор, что-то вроде этого:

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

while (target && !target.id) {
    target = target.parentNode;
}
// at this point target either has an ID or is null
0 голосов
/ 02 декабря 2018

просто используйте e.currentTarget вместо e.target.

...