0

我从 JSON 调用创建元素以构建如下列表。注意msg.id是用来设置li的id的。

                // create variations on somecharacter_id for id so that clicking upon any element reveals associated message id - see clickedId in .on(....)
                for (i = 0; i < messages.length; i++) {
                    var msg = messages[i];
                    var msgString = '<li id="' + msg.id + '" class="msgbox todo-content"><div class="todo-icon fui-bubble-16"></div><div class="todo-content"><h4 class="todo-name">';
                    msgString += msg.sendfrom;
                    msgString += '</h4>' + msg.subject;
                    msgString += '<div style="font-size:x-small;color:#bdc3c7;">' + parseTime(msg.timestamp_string) + '</div></div></li>';
                    $('#message-list').append(msgString);
                }

我希望为单击的相关行检索 msg.id,因此 li 被赋予类名 .msgbox,并且我使用 .msgbox 创建了一个 .on() 事件。但是,在 li 中有各种 div。当我点击 li 中的任何东西时,.on 事件会触发(我认为这是预期的行为)。由于 li 内没有 id,因此 alert(event.target.id) 显示为 null。我应该向 li 中的每个子元素添加 id 以捕获相关 id 吗?肯定有更好的办法。

 $('.msgbox').on('click', function (event) {                               // example 

                // get id
                var clickedId = event.target.id;

                alert(clickedId);
            });
4

1 回答 1

3

代替

var clickedId = event.target.id;

var clickedId = this.id;

您对单击的最精确元素不感兴趣,但对li绑定事件处理程序并单击的元素不感兴趣。此元素this在事件处理程序中。

于 2013-03-18T18:09:59.903 回答