我正在尝试在div contenteditable
输入框中插入文本。当我单击输入框时,光标没有出现。双击输入框后,我可以插入文本。IE 中会出现此问题。
<div contenteditable="true">
<input type="text">
</div>
https://jsfiddle.net/spgkpgdy/
谢谢。
你好,你可以尝试这样的东西,希望它对你有用
function controlselectHandler(evt) {
evt.preventDefault();
}
document.body.addEventListener('mscontrolselect', controlselectHandler);
$('#abc').on('click','input[type="text"]',function(e){
$(this).focus();
})
我对此做了一些研究,我想出了解决方案,希望它有所帮助。
修订后的演示:https://jsfiddle.net/spgkpgdy/9/
参考链接:https://stackoverflow.com/a/21875990/2260060
此问题似乎是因为 IE 允许您在单击内容可编辑div
时移动输入,并且需要双击才能编辑其内容。
一种可能的解决方案是通过使输入焦点onmousedown
来覆盖 IE 的行为。这真的很容易做到:
document.querySelector("div[contenteditable='true'] input").onmousedown = function() {
this.focus();
}
<div contenteditable="true">
<input type="text" />
</div>
您可以在此JSFiddle上看到此JS解决方案和jQuery版本:http://jsfiddle.net/yuzs9rz4/4/
行为
- 首次单击控件时,外部div 将获得焦点。您可以通过拖动其边缘的任何白点来更改其大小。这是
contenteditable=true
意料之中的。 - 双击单击时,div 将离开编辑模式,输入控件获得焦点。因此,您可以输入文本。
两者都是 (Microsoft) HTML 文档元素的预期行为。
解决方案
- 如果可以删除该属性,则您的网页在所有浏览器中的行为都将相同。
- 如果无法删除该属性,则可以放置一个开关来切换可编辑状态。这是我的小代码示例:
<div id="ctrl" contenteditable="true">
<input type="text" />
</div>
<div id="buttonGroup">
<span>This affects to MSIE only</span>
<button onclick="document.getElementById('ctrl').contentEditable='false'">Disable editable</button>
<button onclick="document.getElementById('ctrl').contentEditable='true'">Enable editable</button>
</div>
更新 1:
如果无法删除属性,并且想要在div 周围保留调整大小控制手柄,则可以侦听外部div 的 onfocus 事件并将焦点设置为内部输入控件。
var divElem = document.querySelector("div[contenteditable='true']");
divElem.onfocus = function() {
divElem.querySelector('input').focus();
}