【发布时间】:2020-09-18 03:02:39
【问题描述】:
我有一堆元素。如果您单击一个元素,它会突出显示它,以便您可以做一些事情。如果在突出显示某个元素时单击 Delete/Backspace 键,则会删除该元素。但是,如果我当前正在通过 contentEditable 编辑元素,我不希望它删除该元素。
我想到了:
element.oninput = function(){editing = true};
element.onchange = function(){editing = false};
但如果它们以退格/删除开头,它将在 editing 设置为 true 之前删除元素。
演示问题:
let host = document.getElementById("host");
let elems = 0;
let addElem = function(){
elems++;
let elem = document.createElement('div');
elem.id = "ElemId"+elems;
elem.style.border = "black solid 1px";
elem.innerHTML = "Edit Me...";
elem.onclick = function(){
if(selectedElem && selectedElem.id !== this.id) selectedElem.onblur();
selectedElem = this;
this.focus();
this.style.border = "blue solid 5px";
this.contentEditable = true;
}
elem.onblur = function(){
if(selectedElem.id === this.id) selectedElem = null;
this.style.border = "black solid 1px";
this.contentEditable = false;
}
host.appendChild(elem);
}
addElem();
addElem();
document.getElementById("add").onclick = addElem;
let selectedElem = null;
host.onkeydown = function(e){
if(e.key.toLowerCase() === "delete" || e.key.toLowerCase() === "backspace"){
if(selectedElem){
selectedElem.remove();
}
}
}
.item{
background-color:grey;
font-family:sans-serif;
}
<div id = "host">
<p>Click an element. It now is <span style="border: blue 2px solid;">highlighted</span>. if you click <span class="item">Delete</span> or <span class="item">Backspace</span>, it's supposed to delete the item. (This is functional).<br>Click again after it's highlighted and it allows you to edit it. <span style="font-weight:bold;">While editing</span> it's not supposed to be able to delete.</p>
<button id="add">Add Item:</button>
</div>
【问题讨论】:
-
<div contenteditable="true">Anything inside this div will be editable!</div>我希望这能回答你的问题stackoverflow.com/questions/2441565/… -
由于更复杂的原因,它不能是文本区域。这意味着大量的重写或删除编辑它。我已经知道
contenteditable试试sn-p。 -
我认为您过于复杂,只是为了保存删除按钮。您有一个事件
focus,您尝试在该事件上执行两个不同的操作。 -
没有人告诉你使用
textarea,你不需要复制示例..从解决方案中获取一个想法。
标签: javascript html contenteditable