2

我决定使用带有 contenteditable 的 div 而不是输入。这是一个代码,很简单<div contenteditable="true"></div>所以,看看jsfiddle:http: //jsfiddle.net/QkfKk/

只是为了 jsfiddle 我已经标记了第一行的区域。在 Opera 中,我必须直接单击标记区域以聚焦 div。另外,我可以通过双击那里的任何空间来集中注意力。但是,那个点击不应该是双重的。我希望我解释正确。在 Chrome 和任何其他浏览器中,我只需单击 div 中的任何位置即可对其进行聚焦。在标记区域或非标记区域,无论如何。这是正确的行为,我相信。

4

1 回答 1

1

我已经解决了。该解决方案有一些缺陷,但这对我来说已经足够了。当我单击非标记区域时,无论如何都会触发焦点事件。因此,我决定将光标位置设置为触发焦点事件的最后一个可能位置。这是代码:

var range = document.createRange();
var selection = getSelection();
var children = this.childNodes;
var last = children[children.length-1];
if (last.textContent.length) {
    range.setStart(last,last.textContent.length);
} else {
    range.setStart(this,0);
}
range.collapse(true);
selection.removeAllRanges();
selection.addRange(range);

这绑定在 上focus,仅此而已。解决方案确实很简单,但效果很好。

小提琴:http: //jsfiddle.net/QkfKk/7/

于 2013-04-28T18:07:20.430 回答