Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在contenteditable父div中的div上附加keydown事件侦听器不工作?_Javascript_Html_Vue.js - Fatal编程技术网

Javascript 在contenteditable父div中的div上附加keydown事件侦听器不工作?

Javascript 在contenteditable父div中的div上附加keydown事件侦听器不工作?,javascript,html,vue.js,Javascript,Html,Vue.js,下面是父分区: <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

下面是父分区:

<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>&#8203;</span>
</div>
但是,当我按下tag div中的键时,我什么也得不到,尽管单击事件确实有效。我查看并添加了tabindex属性

我还尝试将事件侦听器附加为:

newTag.addEventListener('keydown', function(event) {
   console.log(event);
});
但这仍然不起作用

知道发生了什么事吗

编辑:根据要求,这里有一个codesandbox链接:


编辑2:我从我的项目中添加了更多的代码,这些代码基本上实现了我试图实现的目标。想想Twitter/Instagram/Slack,当你在键入帖子时@someone,那么可能会出现一些选项给谁@,当你点击某人时,这个“标签”就会添加到你的帖子中。在本例中,继续写一些东西,并包括@,您将看到一个选项列表打开,单击面包或土司,并看到它成为一个标记。我想做的是在标签上添加on-keydown-EventListener,所以请继续,看看它不起作用

我想你想创建一个注释函数吧?但是你的方式不是Vue.js方式。下面是一个简单的注释框示例:

让el=新的Vue({
el:“应用程序”,
模板:“”,
数据(){
返回{
评论:“,
评论:[]
}
},
方法:{
addComment(){
设txt=this.convertTags(this.comment);
console.log(txt);
var d=新日期();
var n=d.toLocaleTimeString();
这个。评论。推({
注释文本:txt,
时间:n
});
this.comment=“”;
},
单击标记(标记){
控制台日志(标签);
},
转换标签(str){
设strArr=str.split(“”);
让mappedArr=strArr.map(el=>{
如果(包括(“@”)){
el=`${el}`;
}
返回“”+el;
});
this.template=mappedArr.join(“”)
返回此.template;
}
}
});
#应用程序{
宽度:80%;
保证金:0自动;
}
.评论{
背景#6c5ce7;
宽度:100%;
保证金:5px0;
颜色:白色;
填充:8px 5px;
}
输入{
保证金:0自动;
宽度:100%;
显示:块;
填充物:5px;
}
.标签{
颜色:黑色;
背景:白色;
填充:2px;
光标:指针;
}

{{comment.time}
显然,我不需要向正在添加的div添加事件侦听器。我可以将其contenteditable属性设置为false,因为用户梦游者的答案如下:

因此,我的答案是:

...
newTag.setAttribute("contenteditable", "false")
document.getElementById("comment")!.appendChild(newTag);

这允许我一次删除标签

请为此创建一个用于显示问题发生情况的。我添加了一个codesandbox链接,请看一看,而不是真正的评论功能,更像是一个twitter/slack标记人功能,带有@…基本上,考虑一下如何在键入时在twitter或instagram中标记某人。其余的单词保持不变,但@person在您键入时变为蓝色。当你输入时,你可以选择像“我遇到了@jo..”这样的人。你会打开一个下拉列表,在那里你可以选择“John”,然后文本将变成“我遇到了@John…”,其中
@John
为蓝色。我知道你在做什么,但我需要使用contenteditable属性。最后一个例子是,如果您使用了Slack:基本上是在您的帖子中添加/标记人,因为我觉得这很难实现。不幸的是,我在这里帮不了你。没问题,请继续关注codesandbox上更新的示例
...
newTag.setAttribute("contenteditable", "false")
document.getElementById("comment")!.appendChild(newTag);