Вот родительский div:
<div
id="comment"
placeholder="Your comment"
class="form-control ellipsesDropdown"
contenteditable="true"
@input="CommentChanged($event)"
> <!-- comments are divided into spans and divs with spans containg normal text and divs containing tags -->
<span>​</span>
</div>
Теперь, когда пользователь щелкает тег, я создаю тег следующим образом:
const newTag = document.createElement('div');
newTag.setAttribute("tabindex", "-1");
newTag.style.cssText = "background-color: rgba(29,155,209,0.1); color: #1264a3; display: inline-block; font-weight: bold;";
const tagContent = document.createTextNode(`@${p}`); // imagine p is an input argument
newTag.append(tagContent);
// attach on key down event listener
newTag.onkeydown = function(event) {
console.log(event)
};
// add tag to the comment div
document.getElementById("comment")!.appendChild(newTag);
Однако я ничего не получаю, когда нажимаю клавиши в теге div события кликов работают. Я взглянул на Как я могу использовать прослушиватель событий keydown на div? и добавил атрибут tabindex.
Я также пробовал прикрепить слушателя событий как:
newTag.addEventListener('keydown', function(event) {
console.log(event);
});
Но это все равно не работает.
Есть идеи о том, что происходит?
РЕДАКТИРОВАТЬ: По запросу, вот ссылка на коды и ящик: https://codesandbox.io/s/blue-bird-tdidr
РЕДАКТИРОВАТЬ 2: Я добавил больше кода из моего проекта, который в основном реализует в определенной степени то, что я пытаюсь выполнить sh. Подумайте о Twitter / Instagram / Slack: когда вы @someone, когда набираете сообщение, возможно, появятся некоторые параметры для того, кому @, и когда вы щелкаете кого-то, этот «тег» добавляется к вашему сообщению. В примере go впереди и напишите что-нибудь и включите @, вы увидите список открытых опций, щелкните хлеб или тост и увидите, что он стал тегом. То, что я пытаюсь сделать, это добавить EventListener on keydown в тег, чтобы go впереди, и увидеть, что это не работает!