仅当单击元素时 contentEditable 为 false
contentEditable is false only when clicked on the element
我有一个 div,里面有一些元素。我想要实现的是当用户双击 div 中的一个元素时,它会将自己设置为 contentEditable
。例如:如果用户双击 p
标签,它就变成可编辑的,只要他点击该标签外的任何地方,它就会将 contentEditable
设置为 false
但实际情况是,当我双击 p
标签时,它确实可以编辑,但是当我单击该元素以外的任何地方时,它不会将自己设置为 false,它只会将自己设置为 false当我再次点击同一个 p
标签时。这很奇怪。我在这里做错了什么?
这是我的代码:
<html>
<body>
<div id="zzz">
<h1>Welcome</h1>
<p>this is the text</p>
<button>click me</button>
<u>yo</u>
</div>
</body>
<script>
let arr = [];
let myiframe = document.getElementById("zzz");
myiframe.addEventListener("click", function (e) {
obj = e.target;
arr.push(obj);
console.log(arr);
if (arr.length > 2) {
arr.shift();
}
if (arr[0] == arr[1]) {
console.log("same");
} else {
console.log("different");
obj.contentEditable = "false";
}
if (event.detail === 2) {
obj.contentEditable = "true";
obj.focus();
}
});
</script>
</html>
e.target
是您单击的元素,因此当您单击一个元素并修改 obj.contentEditable
时,您只会修改该元素的 contentEditable
属性。
如果您将 obj.contentEditable = "false";
更改为 arr[0].contentEditable = "false"
,那么在单击时它将检查元素是否匹配,如果不匹配,它将禁用元素 属性.
我认为你只需要在内存中存储一个元素,也就是最后一个可编辑的元素。我使用了 .setAttribute
并开始工作
let arr = [];
let myiframe = document.getElementById("zzz");
let activeElement = null
myiframe.addEventListener("click", function(e) {
obj = e.target;
//console.log(activeElement)
if (activeElement && activeElement !== obj) {
activeElement.setAttribute('contenteditable', 'false');
}
if (event.detail === 2) {
obj.setAttribute('contenteditable', 'true');
activeElement = obj
obj.focus();
}
});
<div id="zzz">
<h1>Welcome</h1>
<p>this is the text</p>
<button>click me</button>
<u>yo</u>
</div>
我有一个 div,里面有一些元素。我想要实现的是当用户双击 div 中的一个元素时,它会将自己设置为 contentEditable
。例如:如果用户双击 p
标签,它就变成可编辑的,只要他点击该标签外的任何地方,它就会将 contentEditable
设置为 false
但实际情况是,当我双击 p
标签时,它确实可以编辑,但是当我单击该元素以外的任何地方时,它不会将自己设置为 false,它只会将自己设置为 false当我再次点击同一个 p
标签时。这很奇怪。我在这里做错了什么?
这是我的代码:
<html>
<body>
<div id="zzz">
<h1>Welcome</h1>
<p>this is the text</p>
<button>click me</button>
<u>yo</u>
</div>
</body>
<script>
let arr = [];
let myiframe = document.getElementById("zzz");
myiframe.addEventListener("click", function (e) {
obj = e.target;
arr.push(obj);
console.log(arr);
if (arr.length > 2) {
arr.shift();
}
if (arr[0] == arr[1]) {
console.log("same");
} else {
console.log("different");
obj.contentEditable = "false";
}
if (event.detail === 2) {
obj.contentEditable = "true";
obj.focus();
}
});
</script>
</html>
e.target
是您单击的元素,因此当您单击一个元素并修改 obj.contentEditable
时,您只会修改该元素的 contentEditable
属性。
如果您将 obj.contentEditable = "false";
更改为 arr[0].contentEditable = "false"
,那么在单击时它将检查元素是否匹配,如果不匹配,它将禁用元素 属性.
我认为你只需要在内存中存储一个元素,也就是最后一个可编辑的元素。我使用了 .setAttribute
并开始工作
let arr = [];
let myiframe = document.getElementById("zzz");
let activeElement = null
myiframe.addEventListener("click", function(e) {
obj = e.target;
//console.log(activeElement)
if (activeElement && activeElement !== obj) {
activeElement.setAttribute('contenteditable', 'false');
}
if (event.detail === 2) {
obj.setAttribute('contenteditable', 'true');
activeElement = obj
obj.focus();
}
});
<div id="zzz">
<h1>Welcome</h1>
<p>this is the text</p>
<button>click me</button>
<u>yo</u>
</div>